@guildai/cli 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/auth-CRMO5O3N.js +29 -0
  2. package/dist/auth-CRMO5O3N.js.map +7 -0
  3. package/dist/chat-5VX2WJH2.js +303 -0
  4. package/dist/chat-5VX2WJH2.js.map +7 -0
  5. package/dist/chat-SIKDYZQK.js +31 -0
  6. package/dist/chat-SIKDYZQK.js.map +7 -0
  7. package/dist/chunk-56YCMGL3.js +522 -0
  8. package/dist/chunk-56YCMGL3.js.map +7 -0
  9. package/dist/chunk-6EX6E7WP.js +7042 -0
  10. package/dist/chunk-6EX6E7WP.js.map +7 -0
  11. package/dist/chunk-B7VAF5UG.js +532 -0
  12. package/dist/chunk-B7VAF5UG.js.map +7 -0
  13. package/dist/chunk-DOIYVBNY.js +3057 -0
  14. package/dist/chunk-DOIYVBNY.js.map +7 -0
  15. package/dist/chunk-ENKEEJ45.js +17 -0
  16. package/dist/chunk-ENKEEJ45.js.map +7 -0
  17. package/dist/chunk-IBRKVGMZ.js +97041 -0
  18. package/dist/chunk-IBRKVGMZ.js.map +7 -0
  19. package/dist/chunk-LFMQJOKC.js +19778 -0
  20. package/dist/chunk-LFMQJOKC.js.map +7 -0
  21. package/dist/chunk-M347HP6M.js +22896 -0
  22. package/dist/chunk-M347HP6M.js.map +7 -0
  23. package/dist/chunk-OYQ476FQ.js +44 -0
  24. package/dist/chunk-OYQ476FQ.js.map +7 -0
  25. package/dist/chunk-PNCUR4OB.js +257 -0
  26. package/dist/chunk-PNCUR4OB.js.map +7 -0
  27. package/dist/chunk-RIG2HZWM.js +317 -0
  28. package/dist/chunk-RIG2HZWM.js.map +7 -0
  29. package/dist/chunk-SPZPZXUN.js +826 -0
  30. package/dist/chunk-SPZPZXUN.js.map +7 -0
  31. package/dist/chunk-VVSOU6ON.js +53 -0
  32. package/dist/chunk-VVSOU6ON.js.map +7 -0
  33. package/dist/chunk-X3ADGWOF.js +3643 -0
  34. package/dist/chunk-X3ADGWOF.js.map +7 -0
  35. package/dist/commands/agent/logs.d.ts +3 -0
  36. package/dist/commands/setup.d.ts +16 -0
  37. package/dist/commands/skill/create.d.ts +3 -0
  38. package/dist/commands/skill/get.d.ts +3 -0
  39. package/dist/commands/skill/list.d.ts +3 -0
  40. package/dist/commands/skill/update.d.ts +3 -0
  41. package/dist/commands/skill/version/create.d.ts +3 -0
  42. package/dist/commands/skill/version/get.d.ts +3 -0
  43. package/dist/commands/skill/version/list.d.ts +3 -0
  44. package/dist/devtools-AO7YSDOD.js +67 -0
  45. package/dist/devtools-AO7YSDOD.js.map +7 -0
  46. package/dist/dist-4CBK6X5H.js +1566 -0
  47. package/dist/dist-4CBK6X5H.js.map +7 -0
  48. package/dist/esm-FRAVZP4J.js +13 -0
  49. package/dist/esm-FRAVZP4J.js.map +7 -0
  50. package/dist/execa-XQMWSABC.js +35 -0
  51. package/dist/execa-XQMWSABC.js.map +7 -0
  52. package/dist/index.js +8231 -253
  53. package/dist/index.js.map +7 -0
  54. package/dist/lib/api-types.d.ts +44 -0
  55. package/dist/lib/auth.d.ts +1 -1
  56. package/dist/lib/config.d.ts +9 -0
  57. package/dist/lib/errors.d.ts +1 -1
  58. package/dist/lib/output-mode.d.ts +9 -2
  59. package/dist/lib/output.d.ts +17 -1
  60. package/dist/lib/session-events.d.ts +14 -3
  61. package/dist/lib/session-polling.d.ts +24 -1
  62. package/dist/lib/session-resume.d.ts +15 -1
  63. package/dist/lib/stdin.d.ts +5 -1
  64. package/dist/lib/websocket-client.d.ts +46 -0
  65. package/dist/open-RF4X5MOP.js +13 -0
  66. package/dist/open-RF4X5MOP.js.map +7 -0
  67. package/dist/server-JYVH64FD.js +27659 -0
  68. package/dist/server-JYVH64FD.js.map +7 -0
  69. package/dist/test-SNIYRJ32.js +692 -0
  70. package/dist/test-SNIYRJ32.js.map +7 -0
  71. package/docs/skills/codex-agent-dev.md +2 -2
  72. package/package.json +8 -12
  73. package/dist/commands/agent/chat.js +0 -278
  74. package/dist/commands/agent/clone.js +0 -116
  75. package/dist/commands/agent/code.js +0 -87
  76. package/dist/commands/agent/fork.js +0 -218
  77. package/dist/commands/agent/get.js +0 -37
  78. package/dist/commands/agent/grep.js +0 -107
  79. package/dist/commands/agent/init.js +0 -390
  80. package/dist/commands/agent/list.js +0 -110
  81. package/dist/commands/agent/owners.js +0 -74
  82. package/dist/commands/agent/publish.js +0 -91
  83. package/dist/commands/agent/pull.js +0 -198
  84. package/dist/commands/agent/revalidate.js +0 -56
  85. package/dist/commands/agent/save.js +0 -346
  86. package/dist/commands/agent/search.js +0 -61
  87. package/dist/commands/agent/tags/add.js +0 -73
  88. package/dist/commands/agent/tags/list.js +0 -43
  89. package/dist/commands/agent/tags/remove.js +0 -84
  90. package/dist/commands/agent/tags/set.js +0 -71
  91. package/dist/commands/agent/test.js +0 -486
  92. package/dist/commands/agent/unpublish.js +0 -64
  93. package/dist/commands/agent/update.js +0 -110
  94. package/dist/commands/agent/versions.js +0 -55
  95. package/dist/commands/agent/workspaces.js +0 -54
  96. package/dist/commands/auth/login.js +0 -33
  97. package/dist/commands/auth/logout.js +0 -24
  98. package/dist/commands/auth/status.js +0 -38
  99. package/dist/commands/auth/token.js +0 -19
  100. package/dist/commands/chat.js +0 -1345
  101. package/dist/commands/config/get.js +0 -64
  102. package/dist/commands/config/list.js +0 -47
  103. package/dist/commands/config/path.js +0 -38
  104. package/dist/commands/config/set.js +0 -132
  105. package/dist/commands/credentials/endpoint-list.js +0 -88
  106. package/dist/commands/credentials/list.js +0 -50
  107. package/dist/commands/credentials/policy-create.js +0 -66
  108. package/dist/commands/credentials/policy-delete.js +0 -33
  109. package/dist/commands/credentials/policy-list.js +0 -45
  110. package/dist/commands/credentials/policy-update.js +0 -66
  111. package/dist/commands/doctor.js +0 -233
  112. package/dist/commands/integration/connect.js +0 -76
  113. package/dist/commands/integration/create.js +0 -298
  114. package/dist/commands/integration/get.js +0 -95
  115. package/dist/commands/integration/list.js +0 -62
  116. package/dist/commands/integration/operation/create.js +0 -164
  117. package/dist/commands/integration/operation/list.js +0 -92
  118. package/dist/commands/integration/update.js +0 -139
  119. package/dist/commands/integration/version/build.js +0 -86
  120. package/dist/commands/integration/version/create.js +0 -45
  121. package/dist/commands/integration/version/get.js +0 -72
  122. package/dist/commands/integration/version/list.js +0 -45
  123. package/dist/commands/integration/version/publish.js +0 -79
  124. package/dist/commands/integration/version/test.js +0 -104
  125. package/dist/commands/job/get-step.js +0 -40
  126. package/dist/commands/job/get.js +0 -44
  127. package/dist/commands/mcp.js +0 -34
  128. package/dist/commands/session/create.js +0 -59
  129. package/dist/commands/session/events.js +0 -56
  130. package/dist/commands/session/get.js +0 -33
  131. package/dist/commands/session/interrupt.js +0 -33
  132. package/dist/commands/session/list.js +0 -59
  133. package/dist/commands/session/send.js +0 -54
  134. package/dist/commands/session/tasks.js +0 -45
  135. package/dist/commands/setup.js +0 -230
  136. package/dist/commands/trigger/activate.js +0 -41
  137. package/dist/commands/trigger/create.js +0 -197
  138. package/dist/commands/trigger/deactivate.js +0 -41
  139. package/dist/commands/trigger/get.js +0 -33
  140. package/dist/commands/trigger/list.js +0 -57
  141. package/dist/commands/trigger/sessions.js +0 -48
  142. package/dist/commands/trigger/update.js +0 -128
  143. package/dist/commands/version.js +0 -24
  144. package/dist/commands/workspace/agent/add.js +0 -114
  145. package/dist/commands/workspace/agent/list.js +0 -78
  146. package/dist/commands/workspace/agent/remove.js +0 -78
  147. package/dist/commands/workspace/clear.js +0 -45
  148. package/dist/commands/workspace/context/edit.js +0 -107
  149. package/dist/commands/workspace/context/get.js +0 -47
  150. package/dist/commands/workspace/context/list.js +0 -51
  151. package/dist/commands/workspace/context/publish.js +0 -42
  152. package/dist/commands/workspace/create.js +0 -51
  153. package/dist/commands/workspace/current.js +0 -63
  154. package/dist/commands/workspace/get.js +0 -39
  155. package/dist/commands/workspace/list.js +0 -70
  156. package/dist/commands/workspace/select.js +0 -184
  157. package/dist/components/AgentInstallPrompt.js +0 -97
  158. package/dist/components/SplashAnimation.js +0 -321
  159. package/dist/components/TaskView.js +0 -268
  160. package/dist/lib/agent-helpers.js +0 -306
  161. package/dist/lib/alternate-screen.js +0 -59
  162. package/dist/lib/api-client.js +0 -154
  163. package/dist/lib/api-types.js +0 -10
  164. package/dist/lib/auth.js +0 -284
  165. package/dist/lib/braille-canvas.js +0 -321
  166. package/dist/lib/colors.js +0 -46
  167. package/dist/lib/config-cache.js +0 -45
  168. package/dist/lib/config.js +0 -153
  169. package/dist/lib/did-you-mean.js +0 -144
  170. package/dist/lib/errors.js +0 -375
  171. package/dist/lib/event-filter.js +0 -91
  172. package/dist/lib/generated-types.js +0 -56
  173. package/dist/lib/git.js +0 -176
  174. package/dist/lib/gk.js +0 -91
  175. package/dist/lib/guild-config.js +0 -178
  176. package/dist/lib/iap.js +0 -117
  177. package/dist/lib/integration-helpers.js +0 -38
  178. package/dist/lib/loading-messages.js +0 -72
  179. package/dist/lib/logo.js +0 -141
  180. package/dist/lib/lottie-serverside.js +0 -181
  181. package/dist/lib/markdown.js +0 -38
  182. package/dist/lib/npmrc.js +0 -59
  183. package/dist/lib/output-mode.js +0 -33
  184. package/dist/lib/output.js +0 -591
  185. package/dist/lib/owner-helpers.js +0 -112
  186. package/dist/lib/polling.js +0 -76
  187. package/dist/lib/progress.js +0 -324
  188. package/dist/lib/session-events-fetch.js +0 -25
  189. package/dist/lib/session-events.js +0 -112
  190. package/dist/lib/session-polling.js +0 -160
  191. package/dist/lib/session-resume.js +0 -96
  192. package/dist/lib/spinners.js +0 -770
  193. package/dist/lib/splash.js +0 -41
  194. package/dist/lib/stdin.js +0 -84
  195. package/dist/lib/svg-to-braille.js +0 -76
  196. package/dist/lib/table.js +0 -59
  197. package/dist/lib/update-check.js +0 -65
  198. package/dist/lib/validate-input-schema.js +0 -208
  199. package/dist/lib/version-helpers.js +0 -121
  200. package/dist/lib/workspace-helpers.js +0 -49
  201. package/dist/mcp/resources.js +0 -67
  202. package/dist/mcp/server.js +0 -64
  203. package/dist/mcp/tools.js +0 -753
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/lib/table.ts", "../src/lib/output.ts", "../src/commands/version.ts", "../src/lib/npmrc.ts", "../src/commands/auth/login.ts", "../src/commands/auth/logout.ts", "../src/commands/auth/status.ts", "../src/commands/auth/token.ts", "../src/lib/generated-types.ts", "../src/lib/api-types.ts", "../src/commands/agent/list.ts", "../src/commands/agent/get.ts", "../src/commands/agent/update.ts", "../src/commands/agent/versions.ts", "../src/commands/agent/save.ts", "../src/lib/version-helpers.ts", "../src/commands/agent/pull.ts", "../src/commands/agent/code.ts", "../src/commands/agent/init.ts", "../src/commands/agent/grep.ts", "../src/commands/agent/clone.ts", "../src/commands/agent/fork.ts", "../src/commands/agent/publish.ts", "../src/commands/agent/unpublish.ts", "../src/commands/agent/revalidate.ts", "../src/commands/agent/logs.ts", "../src/commands/agent/search.ts", "../src/commands/agent/owners.ts", "../src/commands/agent/workspaces.ts", "../src/commands/agent/tags/list.ts", "../src/commands/agent/tags/add.ts", "../src/commands/agent/tags/remove.ts", "../src/commands/agent/tags/set.ts", "../src/commands/workspace/list.ts", "../src/commands/workspace/create.ts", "../src/commands/workspace/get.ts", "../src/commands/workspace/select.ts", "../src/commands/workspace/current.ts", "../src/commands/workspace/clear.ts", "../src/lib/workspace-helpers.ts", "../src/commands/workspace/agent/add.ts", "../src/commands/workspace/agent/list.ts", "../src/commands/workspace/agent/remove.ts", "../src/commands/workspace/context/list.ts", "../src/commands/workspace/context/get.ts", "../src/commands/workspace/context/edit.ts", "../src/commands/workspace/context/publish.ts", "../src/commands/trigger/list.ts", "../src/commands/trigger/get.ts", "../src/commands/trigger/create.ts", "../src/commands/trigger/update.ts", "../src/commands/trigger/activate.ts", "../src/commands/trigger/deactivate.ts", "../src/commands/trigger/sessions.ts", "../src/commands/session/list.ts", "../src/commands/session/get.ts", "../src/commands/session/events.ts", "../src/commands/session/tasks.ts", "../src/commands/session/create.ts", "../src/commands/session/send.ts", "../src/commands/session/interrupt.ts", "../src/commands/job/get.ts", "../src/commands/job/get-step.ts", "../src/commands/config/list.ts", "../src/commands/config/get.ts", "../src/commands/config/set.ts", "../src/commands/config/path.ts", "../src/commands/credentials/endpoint-list.ts", "../src/commands/credentials/list.ts", "../src/commands/credentials/policy-create.ts", "../src/commands/credentials/policy-delete.ts", "../src/commands/credentials/policy-list.ts", "../src/commands/credentials/policy-update.ts", "../src/commands/doctor.ts", "../src/commands/setup.ts", "../src/commands/mcp.ts", "../src/commands/integration/list.ts", "../src/commands/integration/get.ts", "../src/commands/integration/create.ts", "../src/commands/integration/update.ts", "../src/commands/integration/connect.ts", "../src/commands/integration/version/list.ts", "../src/commands/integration/version/create.ts", "../src/lib/integration-helpers.ts", "../src/commands/integration/version/get.ts", "../src/commands/integration/version/build.ts", "../src/commands/integration/version/publish.ts", "../src/commands/integration/version/test.ts", "../src/commands/integration/operation/list.ts", "../src/commands/integration/operation/create.ts", "../src/commands/skill/create.ts", "../src/commands/skill/get.ts", "../src/commands/skill/list.ts", "../src/commands/skill/update.ts", "../src/commands/skill/version/create.ts", "../src/commands/skill/version/get.ts", "../src/commands/skill/version/list.ts", "../src/lib/logo.ts", "../src/lib/splash.ts", "../src/lib/update-check.ts", "../src/lib/did-you-mean.ts"],
4
+ "sourcesContent": ["// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command, Option } from 'commander';\nimport { readFileSync, existsSync } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { getCliVersion } from './lib/config.js';\nimport { createVersionCommand } from './commands/version.js';\nimport { createAuthLoginCommand } from './commands/auth/login.js';\nimport { createAuthLogoutCommand } from './commands/auth/logout.js';\nimport { createAuthStatusCommand } from './commands/auth/status.js';\nimport { createAuthTokenCommand } from './commands/auth/token.js';\nimport { createAgentListCommand } from './commands/agent/list.js';\nimport { createAgentGetCommand } from './commands/agent/get.js';\nimport { createAgentUpdateCommand } from './commands/agent/update.js';\nimport { createAgentVersionsCommand } from './commands/agent/versions.js';\nimport { createAgentSaveCommand } from './commands/agent/save.js';\nimport { createAgentPullCommand } from './commands/agent/pull.js';\nimport { createAgentCodeCommand } from './commands/agent/code.js';\nimport { createAgentInitCommand } from './commands/agent/init.js';\nimport { createAgentGrepCommand } from './commands/agent/grep.js';\nimport { createAgentCloneCommand } from './commands/agent/clone.js';\nimport { createAgentForkCommand } from './commands/agent/fork.js';\nimport { createAgentPublishCommand } from './commands/agent/publish.js';\nimport { createAgentUnpublishCommand } from './commands/agent/unpublish.js';\nimport { createAgentRevalidateCommand } from './commands/agent/revalidate.js';\nimport { createAgentLogsCommand } from './commands/agent/logs.js';\nimport { createAgentSearchCommand } from './commands/agent/search.js';\nimport { createAgentOwnersCommand } from './commands/agent/owners.js';\nimport { createAgentWorkspacesCommand } from './commands/agent/workspaces.js';\nimport { createAgentTagsListCommand } from './commands/agent/tags/list.js';\nimport { createAgentTagsAddCommand } from './commands/agent/tags/add.js';\nimport { createAgentTagsRemoveCommand } from './commands/agent/tags/remove.js';\nimport { createAgentTagsSetCommand } from './commands/agent/tags/set.js';\nimport { createWorkspaceListCommand } from './commands/workspace/list.js';\nimport { createWorkspaceCreateCommand } from './commands/workspace/create.js';\nimport { createWorkspaceGetCommand } from './commands/workspace/get.js';\nimport { createWorkspaceSelectCommand } from './commands/workspace/select.js';\nimport { createWorkspaceCurrentCommand } from './commands/workspace/current.js';\nimport { createWorkspaceClearCommand } from './commands/workspace/clear.js';\nimport { createWorkspaceAgentAddCommand } from './commands/workspace/agent/add.js';\nimport { createWorkspaceAgentListCommand } from './commands/workspace/agent/list.js';\nimport { createWorkspaceAgentRemoveCommand } from './commands/workspace/agent/remove.js';\nimport { createWorkspaceContextListCommand } from './commands/workspace/context/list.js';\nimport { createWorkspaceContextGetCommand } from './commands/workspace/context/get.js';\nimport { createWorkspaceContextEditCommand } from './commands/workspace/context/edit.js';\nimport { createWorkspaceContextPublishCommand } from './commands/workspace/context/publish.js';\nimport { createTriggerListCommand } from './commands/trigger/list.js';\nimport { createTriggerGetCommand } from './commands/trigger/get.js';\nimport { createTriggerCreateCommand } from './commands/trigger/create.js';\nimport { createTriggerUpdateCommand } from './commands/trigger/update.js';\nimport { createTriggerActivateCommand } from './commands/trigger/activate.js';\nimport { createTriggerDeactivateCommand } from './commands/trigger/deactivate.js';\nimport { createTriggerSessionsCommand } from './commands/trigger/sessions.js';\nimport { createSessionListCommand } from './commands/session/list.js';\nimport { createSessionGetCommand } from './commands/session/get.js';\nimport { createSessionEventsCommand } from './commands/session/events.js';\nimport { createSessionTasksCommand } from './commands/session/tasks.js';\nimport { createSessionCreateCommand } from './commands/session/create.js';\nimport { createSessionSendCommand } from './commands/session/send.js';\nimport { createSessionInterruptCommand } from './commands/session/interrupt.js';\nimport { createJobGetCommand } from './commands/job/get.js';\nimport { createJobGetStepCommand } from './commands/job/get-step.js';\nimport { createConfigListCommand } from './commands/config/list.js';\nimport { createConfigGetCommand } from './commands/config/get.js';\nimport { createConfigSetCommand } from './commands/config/set.js';\nimport { createConfigPathCommand } from './commands/config/path.js';\nimport { createCredentialsEndpointListCommand } from './commands/credentials/endpoint-list.js';\nimport { createCredentialsListCommand } from './commands/credentials/list.js';\nimport { createCredentialsPolicyCreateCommand } from './commands/credentials/policy-create.js';\nimport { createCredentialsPolicyDeleteCommand } from './commands/credentials/policy-delete.js';\nimport { createCredentialsPolicyListCommand } from './commands/credentials/policy-list.js';\nimport { createCredentialsPolicyUpdateCommand } from './commands/credentials/policy-update.js';\nimport { createDoctorCommand } from './commands/doctor.js';\nimport { createSetupCommand } from './commands/setup.js';\nimport { createMcpCommand } from './commands/mcp.js';\nimport { createIntegrationListCommand } from './commands/integration/list.js';\nimport { createIntegrationGetCommand } from './commands/integration/get.js';\nimport { createIntegrationCreateCommand } from './commands/integration/create.js';\nimport { createIntegrationUpdateCommand } from './commands/integration/update.js';\nimport { createIntegrationConnectCommand } from './commands/integration/connect.js';\nimport { createIntegrationVersionListCommand } from './commands/integration/version/list.js';\nimport { createIntegrationVersionCreateCommand } from './commands/integration/version/create.js';\nimport { createIntegrationVersionGetCommand } from './commands/integration/version/get.js';\nimport { createIntegrationVersionBuildCommand } from './commands/integration/version/build.js';\nimport { createIntegrationVersionPublishCommand } from './commands/integration/version/publish.js';\nimport { createIntegrationVersionTestCommand } from './commands/integration/version/test.js';\nimport { createIntegrationOperationListCommand } from './commands/integration/operation/list.js';\nimport { createIntegrationOperationCreateCommand } from './commands/integration/operation/create.js';\nimport { createSkillCreateCommand } from './commands/skill/create.js';\nimport { createSkillGetCommand } from './commands/skill/get.js';\nimport { createSkillListCommand } from './commands/skill/list.js';\nimport { createSkillUpdateCommand } from './commands/skill/update.js';\nimport { createSkillVersionCreateCommand } from './commands/skill/version/create.js';\nimport { createSkillVersionGetCommand } from './commands/skill/version/get.js';\nimport { createSkillVersionListCommand } from './commands/skill/version/list.js';\nimport { showSplashScreen, shouldShowSplash } from './lib/splash.js';\nimport { checkForUpdate } from './lib/update-check.js';\nimport { setupUnknownCommandSuggestions } from './lib/did-you-mean.js';\nimport chalk from 'chalk';\n\nconst cliVersion = getCliVersion();\n\nconst program = new Command();\n\n// MCP mode must not write to stdout (JSON-RPC transport)\nconst isMcpMode = process.argv.includes('mcp');\n\n// Show splash screen conditionally (skip in MCP mode \u2014 stdout is JSON-RPC)\nif (!isMcpMode && shouldShowSplash()) {\n showSplashScreen({\n version: cliVersion,\n });\n}\n\nif (!isMcpMode) {\n checkForUpdate(cliVersion);\n}\n\nprogram\n .name('guild')\n .description('Guild.ai CLI - Build, test, and deploy AI agents')\n .version(cliVersion)\n .option('--debug', 'Enable debug mode with verbose logging')\n .option('--mode <format>', 'Output format: interactive (default), json, or jsonl')\n // Backward compat: --json is a hidden alias for --mode json\n .addOption(new Option('--json').default(false).hideHelp())\n .option('--quiet, -q', 'Suppress progress and log messages')\n .option(\n '--non-interactive',\n 'Disable interactive prompts (for CI, scripts, and coding agents)'\n )\n // Dev shortcuts \u2014 hidden from help, use env vars GUILD_USE_SHARED / GUILD_USE_LOCAL instead\n .addOption(new Option('--shared').default(false).hideHelp())\n .addOption(new Option('--local').default(false).hideHelp())\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n // Set env vars for undocumented dev shortcuts\n if (opts.shared) {\n process.env.GUILD_USE_SHARED = '1';\n }\n if (opts.local) {\n process.env.GUILD_USE_LOCAL = '1';\n }\n });\n\n// Register commands\nprogram.addCommand(createVersionCommand());\n\n// chat \u2014 lazy-loaded to avoid importing React, Ink, marked at startup\nprogram\n .command('chat')\n .description('Chat with an agent (default: Guild assistant)')\n .argument('[prompt...]', 'Optional initial prompt (multiple words)')\n .option(\n '--agent <identifier>',\n 'Agent ID or full name, e.g., foo~bar (default: assistant)'\n )\n .option(\n '--once',\n 'One-shot mode: send message, wait for response, exit (non-interactive)'\n )\n .option(\n '--workspace <identifier>',\n 'Workspace ID or full name (e.g., owner/workspace-name)'\n )\n .option('--no-splash', 'Skip the splash screen animation')\n .option('--resume <session-id>', 'Resume an existing session')\n .option(\n '--events <types>',\n 'Event types to show (default: user). Shorthands: none, user, system, all, or comma-separated type names (e.g. agent_console,llm_start)'\n )\n // Accept --mode here so `guild chat --mode json` doesn't error.\n // The actual value is read from process.argv by getOutputMode().\n .addOption(new Option('--mode <format>').hideHelp())\n .addHelpText(\n 'after',\n '\\nTo chat with a local agent under development: guild agent chat'\n )\n .action(async (promptArgs: string[], options: Record<string, unknown>) => {\n const { handleChatAction } = await import('./commands/chat.js');\n await handleChatAction(\n promptArgs,\n options as Parameters<typeof handleChatAction>[1]\n );\n });\n\nprogram.addCommand(createMcpCommand());\nprogram.addCommand(createDoctorCommand());\nprogram.addCommand(createSetupCommand());\n\n// Auth command group\nconst authCmd = program.command('auth').description('Authentication commands');\nauthCmd.addCommand(createAuthLoginCommand());\nauthCmd.addCommand(createAuthLogoutCommand());\nauthCmd.addCommand(createAuthStatusCommand());\nauthCmd.addCommand(createAuthTokenCommand());\n\n// Agent command group\nconst agentCmd = program.command('agent').description('Agent management');\nagentCmd.addCommand(createAgentListCommand());\nagentCmd.addCommand(createAgentGetCommand());\nagentCmd.addCommand(createAgentUpdateCommand());\nagentCmd.addCommand(createAgentVersionsCommand());\nagentCmd.addCommand(createAgentSaveCommand());\nagentCmd.addCommand(createAgentPullCommand());\nagentCmd.addCommand(createAgentCodeCommand());\n\n// agent chat \u2014 lazy-loaded to avoid importing React, Ink, open at startup\nagentCmd\n .command('chat')\n .description('Chat with the agent in current directory')\n .argument('[prompt...]', 'Optional initial prompt for the agent')\n .option('--path <dir>', 'Path to agent directory (defaults to current directory)')\n .option(\n '--workspace <identifier>',\n 'Workspace ID or full name (e.g., owner~workspace-name)'\n )\n .option(\n '--agent-version <id>',\n 'Chat with a specific version (UUID or version number)'\n )\n .option('--no-splash', 'Skip the splash screen animation')\n .option('--resume <session-id>', 'Resume an existing session')\n .option('--open', 'Open session in web dashboard')\n .option('--no-cache', 'Skip ephemeral build cache (force a fresh build)')\n // Accept --mode here so `guild agent chat --mode json` doesn't error.\n // The actual value is read from process.argv by getOutputMode().\n .addOption(new Option('--mode <format>').hideHelp())\n .addHelpText(\n 'after',\n '\\nTo chat with a published agent by name: guild chat --agent owner~agent-name'\n )\n .action(async (promptArgs: string[], options: Record<string, unknown>) => {\n const { handleAgentChatAction } = await import('./commands/agent/chat.js');\n await handleAgentChatAction(\n promptArgs,\n options as Parameters<typeof handleAgentChatAction>[1]\n );\n });\n\nagentCmd.addCommand(createAgentInitCommand());\nagentCmd.addCommand(createAgentGrepCommand());\nagentCmd.addCommand(createAgentCloneCommand());\nagentCmd.addCommand(createAgentForkCommand());\n\n// agent test \u2014 lazy-loaded to avoid importing React, Ink, open at startup\nagentCmd\n .command('test')\n .description('Test agent in interactive REPL session')\n .option(\n '--workspace <identifier>',\n 'Workspace ID or full name (e.g., owner/workspace-name)'\n )\n .option('--agent-version <id>', 'Test a specific version (UUID or version number)')\n .option('--resume <session-id>', 'Resume an existing test session')\n .option('--open', 'Open session in web dashboard')\n .option(\n '--events <types>',\n 'Event types to stream (default: all). Shorthands: none, user, system, all, or comma-separated type names'\n )\n .option('--bundle <file>', 'Path to a pre-built gzip+base64 bundle file')\n .option('--no-cache', 'Skip ephemeral build cache (force a fresh build)')\n // Accept --mode here so `guild agent test --mode json` doesn't error.\n // The actual value is read from process.argv by getOutputMode().\n .addOption(new Option('--mode <format>').hideHelp())\n .action(async (options: Record<string, unknown>) => {\n const { handleAgentTestAction } = await import('./commands/agent/test.js');\n await handleAgentTestAction(options as Parameters<typeof handleAgentTestAction>[0]);\n });\n\nagentCmd.addCommand(createAgentPublishCommand());\nagentCmd.addCommand(createAgentUnpublishCommand());\nagentCmd.addCommand(createAgentRevalidateCommand());\nagentCmd.addCommand(createAgentLogsCommand());\nagentCmd.addCommand(createAgentSearchCommand());\nagentCmd.addCommand(createAgentOwnersCommand());\nagentCmd.addCommand(createAgentWorkspacesCommand());\n\n// Agent tags subcommand group\nconst tagsCmd = agentCmd.command('tags').description('Manage agent tags');\ntagsCmd.addCommand(createAgentTagsListCommand());\ntagsCmd.addCommand(createAgentTagsAddCommand());\ntagsCmd.addCommand(createAgentTagsRemoveCommand());\ntagsCmd.addCommand(createAgentTagsSetCommand());\n\n// Integration command group\nconst integrationCmd = program\n .command('integration')\n .description('Manage integrations');\nintegrationCmd.addCommand(createIntegrationListCommand());\nintegrationCmd.addCommand(createIntegrationGetCommand());\nintegrationCmd.addCommand(createIntegrationCreateCommand());\nintegrationCmd.addCommand(createIntegrationUpdateCommand());\nintegrationCmd.addCommand(createIntegrationConnectCommand());\n\n// Integration version subcommand group\nconst integrationVersionCmd = integrationCmd\n .command('version')\n .description('Manage integration versions');\nintegrationVersionCmd.addCommand(createIntegrationVersionListCommand());\nintegrationVersionCmd.addCommand(createIntegrationVersionCreateCommand());\nintegrationVersionCmd.addCommand(createIntegrationVersionGetCommand());\nintegrationVersionCmd.addCommand(createIntegrationVersionBuildCommand());\nintegrationVersionCmd.addCommand(createIntegrationVersionPublishCommand());\nintegrationVersionCmd.addCommand(createIntegrationVersionTestCommand());\n\n// Integration operation subcommand group\nconst integrationOperationCmd = integrationCmd\n .command('operation')\n .description('Manage version operations');\nintegrationOperationCmd.addCommand(createIntegrationOperationListCommand());\nintegrationOperationCmd.addCommand(createIntegrationOperationCreateCommand());\n\n// Skill command group\nconst skillCmd = program.command('skill').description('Skill management');\nskillCmd.addCommand(createSkillCreateCommand());\nskillCmd.addCommand(createSkillGetCommand());\nskillCmd.addCommand(createSkillListCommand());\nskillCmd.addCommand(createSkillUpdateCommand());\nconst skillVersionCmd = skillCmd\n .command('version')\n .description('Manage skill versions');\nskillVersionCmd.addCommand(createSkillVersionCreateCommand());\nskillVersionCmd.addCommand(createSkillVersionGetCommand());\nskillVersionCmd.addCommand(createSkillVersionListCommand());\n\n// Workspace command group\nconst workspaceCmd = program.command('workspace').description('Workspace management');\nworkspaceCmd.addCommand(createWorkspaceListCommand());\nworkspaceCmd.addCommand(createWorkspaceCreateCommand());\nworkspaceCmd.addCommand(createWorkspaceGetCommand());\nworkspaceCmd.addCommand(createWorkspaceSelectCommand());\nworkspaceCmd.addCommand(createWorkspaceCurrentCommand());\nworkspaceCmd.addCommand(createWorkspaceClearCommand());\n// Workspace agent subcommand group\nconst workspaceAgentCmd = workspaceCmd\n .command('agent')\n .description('Manage agents in a workspace');\nworkspaceAgentCmd.addCommand(createWorkspaceAgentAddCommand());\nworkspaceAgentCmd.addCommand(createWorkspaceAgentListCommand());\nworkspaceAgentCmd.addCommand(createWorkspaceAgentRemoveCommand());\n\n// Show current workspace at the end of help output\nworkspaceCmd.addHelpText('after', () => {\n try {\n // Check global config first\n const globalConfigPath = path.join(os.homedir(), '.guild', 'config.json');\n if (existsSync(globalConfigPath)) {\n const content = readFileSync(globalConfigPath, 'utf-8');\n const config = JSON.parse(content);\n if (config.default_workspace) {\n const name = config.default_workspace_name;\n const id = config.default_workspace;\n const display = name ? `${name} (${id})` : id;\n return `\\n${chalk.dim(`Current workspace: ${display}`)}`;\n }\n }\n\n // Check local config\n const localConfigPath = path.join(process.cwd(), 'guild.json');\n if (existsSync(localConfigPath)) {\n const content = readFileSync(localConfigPath, 'utf-8');\n const config = JSON.parse(content);\n if (config.workspace_id) {\n return `\\n${chalk.dim(`Current workspace: ${config.workspace_id} (from guild.json)`)}`;\n }\n }\n } catch {\n // Ignore errors reading config\n }\n\n return `\\n${chalk.dim('No default workspace configured. Run: guild workspace select')}`;\n});\n\n// Workspace context command group\nconst contextCmd = workspaceCmd\n .command('context')\n .description('Workspace context management');\ncontextCmd.addCommand(createWorkspaceContextListCommand());\ncontextCmd.addCommand(createWorkspaceContextGetCommand());\ncontextCmd.addCommand(createWorkspaceContextEditCommand());\ncontextCmd.addCommand(createWorkspaceContextPublishCommand());\n\n// Trigger command group\nconst triggerCmd = program.command('trigger').description('Trigger management');\ntriggerCmd.addCommand(createTriggerListCommand());\ntriggerCmd.addCommand(createTriggerGetCommand());\ntriggerCmd.addCommand(createTriggerCreateCommand());\ntriggerCmd.addCommand(createTriggerUpdateCommand());\ntriggerCmd.addCommand(createTriggerActivateCommand());\ntriggerCmd.addCommand(createTriggerDeactivateCommand());\ntriggerCmd.addCommand(createTriggerSessionsCommand());\n\n// Credentials command group\nconst credentialsCmd = program\n .command('credentials')\n .description('Credential management');\ncredentialsCmd.addCommand(createCredentialsListCommand());\nconst credentialsPolicyCmd = credentialsCmd\n .command('policy')\n .description('Manage credential policies');\ncredentialsPolicyCmd.addCommand(createCredentialsPolicyListCommand());\ncredentialsPolicyCmd.addCommand(createCredentialsPolicyCreateCommand());\ncredentialsPolicyCmd.addCommand(createCredentialsPolicyUpdateCommand());\ncredentialsPolicyCmd.addCommand(createCredentialsPolicyDeleteCommand());\nconst credentialsEndpointCmd = credentialsCmd\n .command('endpoint')\n .description('Manage credential endpoints');\ncredentialsEndpointCmd.addCommand(createCredentialsEndpointListCommand());\n\n// Session command group\nconst sessionCmd = program.command('session').description('Session management');\nsessionCmd.addCommand(createSessionListCommand());\nsessionCmd.addCommand(createSessionGetCommand());\nsessionCmd.addCommand(createSessionEventsCommand());\nsessionCmd.addCommand(createSessionTasksCommand());\nsessionCmd.addCommand(createSessionCreateCommand());\nsessionCmd.addCommand(createSessionSendCommand());\nsessionCmd.addCommand(createSessionInterruptCommand());\n\n// Job command group\nconst jobCmd = program.command('job').description('Job management');\njobCmd.addCommand(createJobGetCommand());\njobCmd.addCommand(createJobGetStepCommand());\nconst stepGetAlias = createJobGetStepCommand();\nstepGetAlias.name('step-get');\njobCmd.addCommand(stepGetAlias, { hidden: true });\n\n// Config command group\nconst configCmd = program\n .command('config')\n .description('View and manage configuration');\nconfigCmd.addCommand(createConfigListCommand());\nconfigCmd.addCommand(createConfigGetCommand());\nconfigCmd.addCommand(createConfigSetCommand());\nconfigCmd.addCommand(createConfigPathCommand());\n\n// Set up cross-level \"Did you mean?\" suggestions for unknown commands\nsetupUnknownCommandSuggestions(program);\n\n// Parse arguments\nprogram.parse(process.argv);\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport chalk, { type ChalkInstance } from 'chalk';\nimport stringWidth from 'string-width';\n\ninterface ColumnConfig {\n name: string;\n title: string;\n alignment?: 'left';\n color?: string;\n}\n\n/**\n * Minimal table renderer using string-width@7 for ANSI-aware column sizing.\n */\nexport class Table {\n private columns: ColumnConfig[];\n private rows: Record<string, string>[] = [];\n\n constructor(config: { columns: ColumnConfig[] }) {\n this.columns = config.columns;\n }\n\n addRow(row: Record<string, string>): void {\n const sanitized: Record<string, string> = {};\n for (const [k, v] of Object.entries(row)) {\n sanitized[k] = v.replace(/[\\r\\n]+/g, ' ').trim();\n }\n this.rows.push(sanitized);\n }\n\n render(): string {\n const widths = this.columns.map((col) => {\n const headerWidth = stringWidth(col.title);\n const maxData = this.rows.reduce(\n (max, row) => Math.max(max, stringWidth(row[col.name] ?? '')),\n 0\n );\n return Math.max(headerWidth, maxData);\n });\n\n const pad = (text: string, width: number): string => {\n const visible = stringWidth(text);\n return visible >= width ? text : text + ' '.repeat(width - visible);\n };\n\n const top = '\u250C' + widths.map((w) => '\u2500'.repeat(w + 2)).join('\u252C') + '\u2510';\n const mid = '\u251C' + widths.map((w) => '\u2500'.repeat(w + 2)).join('\u253C') + '\u2524';\n const bot = '\u2514' + widths.map((w) => '\u2500'.repeat(w + 2)).join('\u2534') + '\u2518';\n\n const header =\n '\u2502' +\n this.columns\n .map((col, i) => ' ' + chalk.bold(pad(col.title, widths[i])) + ' ')\n .join('\u2502') +\n '\u2502';\n\n const dataRows = this.rows.map(\n (row) =>\n '\u2502' +\n this.columns\n .map((col, i) => {\n const val = row[col.name] ?? '';\n const padded = pad(val, widths[i]);\n if (col.color && col.color in chalk) {\n return (\n ' ' +\n (chalk[col.color as keyof ChalkInstance] as ChalkInstance)(padded) +\n ' '\n );\n }\n return ' ' + padded + ' ';\n })\n .join('\u2502') +\n '\u2502'\n );\n\n return [top, header, mid, ...dataRows, bot].join('\\n');\n }\n\n printTable(): void {\n console.log(this.render());\n }\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport chalk from 'chalk';\nimport { Table } from './table.js';\nimport { getOutputMode, isQuietMode } from './output-mode.js';\nimport { createSpinner, type Spinner } from './progress.js';\nimport { brand, hyperlink } from './colors.js';\nimport { getDashboardUrl } from './config.js';\nimport type {\n Agent,\n AgentVersion,\n Credentials,\n CredentialsPolicy,\n Context,\n Integration,\n IntegrationVersion,\n JobStep,\n Pagination,\n Session,\n Skill,\n SkillVersion,\n Task,\n ValidationStep,\n Workspace,\n WorkspaceAgent,\n Trigger,\n} from './api-types.js';\n\n/**\n * Format a relative timestamp (e.g. \"2d ago\", \"3mo ago\")\n */\nfunction formatRelativeTime(dateStr: string): string {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n if (diffWeeks < 5) return `${diffWeeks}w ago`;\n return `${diffMonths}mo ago`;\n}\n\n/**\n * Truncate a string to a max length, appending ellipsis if needed\n */\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 1) + '\u2026';\n}\n\n/**\n * Print the \"Showing N of M <entity>\" footer after a paginated table.\n */\nfunction printPaginationFooter(\n pagination: Pagination,\n count: number,\n entityName: string\n): void {\n const showing = Math.min(pagination.limit, count);\n if (pagination.has_more) {\n const nextOffset = pagination.offset + pagination.limit;\n console.log(\n `\\nShowing ${showing} of ${pagination.total_count} ${entityName}. ` +\n chalk.dim(`Use --offset ${nextOffset} to see more.`)\n );\n } else if (pagination.total_count > showing) {\n console.log(\n chalk.dim(`\\nShowing ${showing} of ${pagination.total_count} ${entityName}`)\n );\n }\n}\n\n/**\n * Format an agent list as a human-readable table.\n * Shared by agent list and agent search commands.\n */\nexport function formatAgentTable(\n agents: Agent[],\n pagination: Pagination,\n showArchived = false\n): void {\n if (agents.length === 0) {\n console.log(chalk.dim('No agents found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'owner', title: 'OWNER', alignment: 'left', color: 'cyan' },\n {\n name: 'description',\n title: 'DESCRIPTION',\n alignment: 'left',\n },\n { name: 'updated', title: 'UPDATED', alignment: 'left' },\n ],\n });\n\n const base = getDashboardUrl();\n\n agents.forEach((agent) => {\n const rawName = agent.full_name || agent.name;\n const agentUrl = agent.full_name ? `${base}/agents/${agent.full_name}` : '';\n const linkedName = agentUrl ? hyperlink(rawName, agentUrl) : rawName;\n const displayName =\n showArchived && agent.is_archived\n ? linkedName + chalk.dim(' [archived]')\n : linkedName;\n\n table.addRow({\n name: displayName,\n owner: agent.owner?.name || '',\n description: truncate(agent.description || '', 40),\n updated: agent.updated_at ? formatRelativeTime(agent.updated_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, agents.length, 'agents');\n}\n\n/**\n * Format an integration list as a human-readable table.\n * Used by integration list command.\n */\nexport function formatIntegrationTable(\n integrations: Integration[],\n pagination: Pagination\n): void {\n if (integrations.length === 0) {\n console.log(chalk.dim('No integrations found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'description', title: 'DESCRIPTION', alignment: 'left' },\n { name: 'visibility', title: 'VISIBILITY', alignment: 'left' },\n { name: 'owner', title: 'OWNER', alignment: 'left', color: 'cyan' },\n { name: 'updated', title: 'UPDATED', alignment: 'left' },\n ],\n });\n\n integrations.forEach((integration) => {\n table.addRow({\n name: integration.name,\n description: truncate(integration.description || '', 40),\n visibility: integration.is_public ? 'public' : 'internal',\n owner: integration.owner?.name || '',\n updated: integration.updated_at ? formatRelativeTime(integration.updated_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, integrations.length, 'integrations');\n}\n\n/**\n * Format a skill list as a human-readable table.\n * Used by skill list command.\n */\nexport function formatSkillTable(skills: Skill[], pagination: Pagination): void {\n if (skills.length === 0) {\n console.log(chalk.dim('No skills found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'owner', title: 'OWNER', alignment: 'left', color: 'cyan' },\n { name: 'overview', title: 'OVERVIEW', alignment: 'left' },\n { name: 'updated', title: 'UPDATED', alignment: 'left' },\n ],\n });\n\n skills.forEach((skill) => {\n table.addRow({\n name: skill.full_name || skill.name,\n owner: skill.owner?.name || '',\n overview: truncate(skill.overview || '', 40),\n updated: skill.updated_at ? formatRelativeTime(skill.updated_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, skills.length, 'skills');\n}\n\n/**\n * Format a skill version list as a human-readable table.\n * Used by skill version list command.\n */\nexport function formatSkillVersionTable(\n versions: SkillVersion[],\n pagination: Pagination,\n skillName: string\n): void {\n if (versions.length === 0) {\n console.log(chalk.dim('No versions found'));\n return;\n }\n\n console.log(chalk.bold(`Versions for ${skillName}`));\n console.log();\n\n const table = new Table({\n columns: [\n { name: 'version', title: 'VERSION', alignment: 'left' },\n { name: 'description', title: 'DESCRIPTION', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n versions.forEach((v) => {\n table.addRow({\n version: v.version_number,\n description: truncate(v.description || '', 40),\n created: v.created_at ? formatRelativeTime(v.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, versions.length, 'versions');\n}\n\n/**\n * Format an integration version list as a human-readable table.\n * Used by integration version list command.\n */\nexport function formatIntegrationVersionTable(\n versions: IntegrationVersion[],\n pagination: Pagination,\n integrationName: string\n): void {\n if (versions.length === 0) {\n console.log(chalk.dim('No versions found'));\n return;\n }\n\n console.log(chalk.bold(`Versions for ${integrationName}`));\n console.log();\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'version', title: 'VERSION', alignment: 'left' },\n { name: 'author', title: 'AUTHOR', alignment: 'left', color: 'cyan' },\n { name: 'status', title: 'STATUS', alignment: 'left' },\n { name: 'published', title: 'PUBLISHED', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n versions.forEach((v) => {\n let statusLabel: string;\n switch (v.validation_status) {\n case 'PASSED':\n statusLabel = chalk.green('Valid');\n break;\n case 'FAILED':\n statusLabel = chalk.red('Failed');\n break;\n case 'RUNNING':\n statusLabel = chalk.yellow('Building');\n break;\n default:\n statusLabel = chalk.dim('\u2014');\n }\n\n table.addRow({\n id: v.id,\n version: v.version_number || 'Draft',\n author: v.author?.name || '',\n status: statusLabel,\n published: v.published_at ? formatRelativeTime(v.published_at) : chalk.dim('\u2014'),\n created: v.created_at ? formatRelativeTime(v.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, versions.length, 'versions');\n}\n\n/**\n * Format an agent version list as a human-readable table.\n * Used by agent versions command.\n */\nexport function formatVersionTable(\n versions: AgentVersion[],\n pagination: Pagination\n): void {\n if (versions.length === 0) {\n console.log(chalk.dim('No versions found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'version', title: 'VERSION', alignment: 'left', color: 'cyan' },\n { name: 'status', title: 'STATUS', alignment: 'left' },\n { name: 'validation', title: 'VALIDATION', alignment: 'left' },\n { name: 'summary', title: 'SUMMARY', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n versions.forEach((v) => {\n const validationColor =\n v.validation_status === 'PASSED'\n ? chalk.green\n : v.validation_status === 'FAILED'\n ? chalk.red\n : chalk.dim;\n\n table.addRow({\n id: v.id,\n version: v.version_number || '-',\n status: v.status,\n validation: validationColor(v.validation_status || '-'),\n summary: truncate(v.summary || '', 30),\n created: v.created_at ? formatRelativeTime(v.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, versions.length, 'versions');\n}\n\n/**\n * Format a context list as a human-readable table.\n * Used by workspace context list command.\n */\nexport function formatContextTable(contexts: Context[], pagination: Pagination): void {\n if (contexts.length === 0) {\n console.log(chalk.dim('No contexts found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'status', title: 'STATUS', alignment: 'left', color: 'cyan' },\n { name: 'type', title: 'TYPE', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n contexts.forEach((ctx) => {\n table.addRow({\n id: ctx.id,\n status: ctx.status,\n type: ctx.type || '-',\n created: ctx.created_at ? formatRelativeTime(ctx.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, contexts.length, 'contexts');\n}\n\n/**\n * Format a workspace agent list as a human-readable table.\n * Used by workspace agent list command.\n */\nexport function formatWorkspaceAgentTable(agents: WorkspaceAgent[]): void {\n if (agents.length === 0) {\n console.log(chalk.dim('No agents installed in this workspace'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'version', title: 'VERSION', alignment: 'left', color: 'cyan' },\n { name: 'auto_update', title: 'AUTO-UPDATE', alignment: 'left' },\n ],\n });\n\n const base = getDashboardUrl();\n\n agents.forEach((wa) => {\n const name = wa.agent.full_name || wa.agent.name;\n const agentUrl = wa.agent.full_name ? `${base}/agents/${wa.agent.full_name}` : '';\n\n table.addRow({\n name: agentUrl ? hyperlink(name, agentUrl) : name,\n version: wa.agent_version.version_number || wa.agent_version.id,\n auto_update: wa.should_autoupdate ? chalk.green('yes') : chalk.dim('no'),\n });\n });\n\n table.printTable();\n}\n\n/**\n * Format a workspace list as a human-readable table.\n * Used by workspace list command.\n */\nexport function formatWorkspaceTable(\n workspaces: Workspace[],\n pagination: Pagination\n): void {\n if (workspaces.length === 0) {\n console.log(chalk.dim('No workspaces found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'full_name', title: 'FULL NAME', alignment: 'left', color: 'cyan' },\n { name: 'owner', title: 'OWNER', alignment: 'left' },\n { name: 'id', title: 'ID', alignment: 'left' },\n ],\n });\n\n workspaces.forEach((workspace) => {\n table.addRow({\n name: workspace.name,\n full_name: workspace.full_name || workspace.name,\n owner: workspace.owner?.name || '',\n id: workspace.id,\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, workspaces.length, 'workspaces');\n}\n\n/**\n * Format a session list as a human-readable table.\n * Used by session list command.\n */\nexport function formatSessionTable(sessions: Session[], pagination: Pagination): void {\n if (sessions.length === 0) {\n console.log(chalk.dim('No sessions found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'type', title: 'TYPE', alignment: 'left', color: 'cyan' },\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'workspace', title: 'WORKSPACE', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n const base = getDashboardUrl();\n\n sessions.forEach((session) => {\n table.addRow({\n id: hyperlink(session.id, `${base}/sessions/${session.id}`),\n type: session.session_type,\n name: session.name ? truncate(session.name, 30) : '-',\n workspace: session.workspace?.name || '',\n created: session.created_at ? formatRelativeTime(session.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, sessions.length, 'sessions');\n}\n\n/**\n * Format a task list as a human-readable table.\n * Used by session tasks command.\n */\nexport function formatTaskTable(tasks: Task[], pagination: Pagination): void {\n if (tasks.length === 0) {\n console.log(chalk.dim('No tasks found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'name', title: 'NAME', alignment: 'left' },\n { name: 'status', title: 'STATUS', alignment: 'left' },\n { name: 'tokens', title: 'TOKENS', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n tasks.forEach((task) => {\n const name =\n task.entity_type === 'EntTaskAgent'\n ? task.agent?.full_name || task.agent?.name || '-'\n : task.tool_name;\n\n const statusColor =\n task.status === 'DONE'\n ? chalk.green\n : task.status === 'ERROR'\n ? chalk.red\n : task.status === 'RUNNING' ||\n task.status === 'STARTED' ||\n task.status === 'WAITING'\n ? chalk.yellow\n : chalk.dim;\n\n table.addRow({\n id: task.id,\n name,\n status: statusColor(task.status),\n tokens: task.token_usage ? task.token_usage.total_tokens.toLocaleString() : '-',\n created: task.created_at ? formatRelativeTime(task.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, tasks.length, 'tasks');\n}\n\n/**\n * Format a trigger list as a human-readable table.\n * Used by trigger list command.\n */\nexport function formatTriggerTable(triggers: Trigger[], pagination: Pagination): void {\n if (triggers.length === 0) {\n console.log(chalk.dim('No triggers found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'type', title: 'TYPE', alignment: 'left', color: 'cyan' },\n { name: 'agent', title: 'AGENT', alignment: 'left' },\n { name: 'status', title: 'STATUS', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n const base = getDashboardUrl();\n\n triggers.forEach((trigger) => {\n const status = trigger.disabled_reason\n ? chalk.yellow('disabled')\n : trigger.deactivated_at\n ? chalk.dim('inactive')\n : chalk.green('active');\n\n const agentName = trigger.agent?.full_name || trigger.agent?.name || '';\n const agentUrl = trigger.agent?.full_name\n ? `${base}/agents/${trigger.agent.full_name}`\n : '';\n\n const ownerSegment =\n trigger.workspace.owner.type === 'organization' ? 'organizations' : 'users';\n const triggerUrl = `${base}/${ownerSegment}/${trigger.workspace.owner.name}/workspaces/${trigger.workspace.name}/triggers`;\n\n table.addRow({\n id: hyperlink(trigger.id, triggerUrl),\n type: trigger.type,\n agent: agentUrl ? hyperlink(agentName, agentUrl) : agentName,\n status,\n created: trigger.created_at ? formatRelativeTime(trigger.created_at) : '',\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, triggers.length, 'triggers');\n}\n\nexport function formatCredentialsTable(\n credentials: Credentials[],\n pagination: Pagination\n): void {\n if (credentials.length === 0) {\n console.log(chalk.dim('No credentials found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'integration', title: 'INTEGRATION', alignment: 'left' },\n { name: 'creator', title: 'CREATOR', alignment: 'left', color: 'cyan' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n credentials.forEach((cred) => {\n table.addRow({\n id: cred.id,\n integration: cred.integration.full_name,\n creator: cred.creator.name,\n created: formatRelativeTime(cred.created_at),\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, credentials.length, 'credentials');\n}\n\nexport function formatPoliciesTable(\n policies: CredentialsPolicy[],\n pagination: Pagination\n): void {\n if (policies.length === 0) {\n console.log(chalk.dim('No policies found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'id', title: 'ID', alignment: 'left' },\n { name: 'decision', title: 'DECISION', alignment: 'left' },\n { name: 'operations', title: 'OPERATIONS', alignment: 'left' },\n { name: 'workspaces', title: 'WORKSPACES', alignment: 'left' },\n { name: 'agents', title: 'AGENTS', alignment: 'left' },\n { name: 'resources', title: 'RESOURCES', alignment: 'left' },\n { name: 'created', title: 'CREATED', alignment: 'left' },\n ],\n });\n\n policies.forEach((policy) => {\n const decisionColor = policy.decision === 'ALLOW' ? chalk.green : chalk.red;\n\n table.addRow({\n id: policy.id,\n decision: decisionColor(policy.decision),\n operations: policy.operations\n ? truncate(policy.operations.join(', '), 30)\n : chalk.dim('all'),\n workspaces:\n policy.workspaces.length > 0\n ? truncate(policy.workspaces.map((w) => w.full_name || w.name).join(', '), 20)\n : chalk.dim('all'),\n agents:\n policy.agents.length > 0\n ? truncate(policy.agents.map((a) => a.full_name || a.name).join(', '), 20)\n : chalk.dim('all'),\n resources: policy.resources\n ? truncate(\n Object.entries(policy.resources)\n .map(([k, v]) => `${k}: ${v.join(', ')}`)\n .join('; '),\n 30\n )\n : chalk.dim('none'),\n created: formatRelativeTime(policy.created_at),\n });\n });\n\n table.printTable();\n\n printPaginationFooter(pagination, policies.length, 'policies');\n}\n\n/**\n * Format job steps as a human-readable table.\n * Used by job get command.\n */\nexport function formatJobStepTable(steps: JobStep[]): void {\n if (steps.length === 0) {\n console.log(chalk.dim('No steps found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'name', title: 'STEP', alignment: 'left' },\n { name: 'status', title: 'STATUS', alignment: 'left' },\n { name: 'started', title: 'STARTED', alignment: 'left' },\n { name: 'completed', title: 'COMPLETED', alignment: 'left' },\n ],\n });\n\n steps.forEach((step) => {\n const statusColor =\n step.status === 'SUCCEEDED'\n ? chalk.green\n : step.status === 'FAILED' || step.status === 'ERRORED'\n ? chalk.red\n : step.status === 'RUNNING'\n ? chalk.yellow\n : step.status === 'SKIPPED'\n ? chalk.dim\n : chalk.white;\n\n table.addRow({\n name: step.name,\n status: statusColor(step.status),\n started: step.started_at ? formatRelativeTime(step.started_at) : '-',\n completed: step.completed_at ? formatRelativeTime(step.completed_at) : '-',\n });\n });\n\n table.printTable();\n}\n\n/**\n * Format validation step logs as human-readable output.\n * Prints each step's name, colored status, and full log content.\n * Used by the `guild agent logs` command.\n */\nexport function formatValidationLogs(steps: ValidationStep[]): void {\n if (steps.length === 0) {\n console.log(chalk.dim('No steps found'));\n return;\n }\n\n const hr = chalk.dim('\u2500'.repeat(60));\n\n steps.forEach((step, index) => {\n if (index > 0) {\n console.log(hr);\n }\n\n const statusColor =\n step.status === 'SUCCEEDED'\n ? chalk.green\n : step.status === 'FAILED' || step.status === 'ERRORED'\n ? chalk.red\n : step.status === 'RUNNING'\n ? chalk.yellow\n : chalk.dim;\n\n console.log(`${chalk.bold(step.name)} ${statusColor(step.status)}`);\n\n if (step.content) {\n console.log();\n console.log(step.content);\n }\n });\n}\n\n/**\n * Output writer interface for consistent CLI output\n *\n * Implementations:\n * - InteractiveOutputWriter: Colors, tables, spinners for interactive use\n * - JSONOutputWriter: Pure JSON for scripting and automation\n */\nexport interface OutputWriter {\n /**\n * Output structured data (goes to stdout)\n */\n data(value: unknown): void;\n\n /**\n * Output success message with optional details\n */\n success(message: string, details?: Record<string, unknown>): void;\n\n /**\n * Output error message with optional details\n */\n error(message: string, details?: string): void;\n\n /**\n * Output progress message (goes to stderr, suppressible with --quiet)\n */\n progress(message: string): void;\n\n /**\n * Create progress spinner (goes to stderr, suppressible with --quiet)\n */\n spinner(message: string): Spinner;\n}\n\n/**\n * Human-friendly output writer\n *\n * Uses colors, symbols, and formatting for readability.\n * Progress goes to stderr.\n */\nexport class InteractiveOutputWriter implements OutputWriter {\n data(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n }\n\n success(message: string, details?: Record<string, unknown>): void {\n process.stderr.write(chalk.green('\u2713') + ' ' + message + '\\n');\n if (details) {\n Object.entries(details).forEach(([k, v]) => {\n process.stderr.write(` ${k}: ${brand(String(v))}\\n`);\n });\n }\n }\n\n error(message: string, details?: string): void {\n console.error(chalk.red('\u2717'), message);\n if (details) {\n console.error(chalk.dim(details));\n }\n }\n\n progress(message: string): void {\n if (!isQuietMode()) {\n process.stderr.write(chalk.dim(message) + '\\n');\n }\n }\n\n spinner(message: string): Spinner {\n if (isQuietMode()) {\n return createNoopSpinner();\n }\n return createSpinner(message);\n }\n}\n\n/**\n * JSON output writer\n *\n * Outputs pure JSON to stdout for machine consumption.\n * Progress goes to stderr as JSON (unless --quiet).\n */\nexport class JSONOutputWriter implements OutputWriter {\n data(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n }\n\n success(message: string, details?: Record<string, unknown>): void {\n process.stderr.write(JSON.stringify({ success: true, message, ...details }) + '\\n');\n }\n\n error(message: string, details?: string): void {\n process.stderr.write(\n JSON.stringify({ success: false, error: message, details }) + '\\n'\n );\n }\n\n progress(message: string): void {\n if (!isQuietMode()) {\n process.stderr.write(JSON.stringify({ progress: message }) + '\\n');\n }\n }\n\n spinner(_message: string): Spinner {\n // No-op spinner in JSON mode\n return createNoopSpinner();\n }\n}\n\n/**\n * Create output writer based on current mode\n */\nexport function createOutputWriter(): OutputWriter {\n const mode = getOutputMode();\n return mode === 'interactive'\n ? new InteractiveOutputWriter()\n : new JSONOutputWriter();\n}\n\n/**\n * Create a no-op spinner (for quiet/JSON modes)\n */\nfunction createNoopSpinner(): Spinner {\n return {\n start: (): void => {},\n succeed: (): void => {},\n fail: (): void => {},\n warn: (): void => {},\n stop: (): void => {},\n text: '',\n };\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { createOutputWriter } from '../lib/output.js';\nimport { getCliVersion } from '../lib/config.js';\n\nexport function createVersionCommand(): Command {\n const cmd = new Command('version');\n\n cmd.description('Show Guild CLI version').action(() => {\n const output = createOutputWriter();\n\n output.data({\n name: 'Guild CLI',\n version: getCliVersion(),\n description: 'Unified interface for Guild.ai agent development',\n });\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { execa } from 'execa';\nimport { getGuildcoreUrl } from './config.js';\nimport { getAuthToken } from './auth.js';\nimport { debug } from './errors.js';\n\nfunction getRegistryUrl(): string {\n const url = getGuildcoreUrl();\n return url.replace('/api', '/npm') + (url.endsWith('/') ? '' : '/');\n}\n\nconst SCOPES = ['@guildai-services', '@guildai-agents'] as const;\nconst LEGACY_SCOPES = ['@guildai'] as const;\n\nexport async function configureNpmrc(): Promise<void> {\n const registryUrl = getRegistryUrl();\n const scope = registryUrl.split(':').slice(1).join(':');\n const authToken = await getAuthToken();\n if (!authToken) {\n throw new Error('No authentication token found');\n }\n try {\n await execa('npm', [\n '--workspaces=false',\n 'config',\n 'set',\n '--location',\n 'user',\n ...SCOPES.map((s) => `${s}:registry=${registryUrl}`),\n `${scope}:_authToken=${authToken}`,\n ]);\n } catch (error) {\n debug('Failed to configure npm registry:', error);\n throw new Error('Failed to configure npm registry. Is npm installed?');\n }\n}\n\nexport async function cleanupNpmrc(): Promise<void> {\n const registryUrl = getRegistryUrl();\n const scope = registryUrl.split(':').slice(1).join(':');\n const keys = [\n ...[...SCOPES, ...LEGACY_SCOPES].map((s) => `${s}:registry`),\n `${scope}:_authToken`,\n ];\n for (const key of keys) {\n try {\n await execa('npm', [\n '--workspaces=false',\n 'config',\n 'delete',\n '--location',\n 'user',\n key,\n ]);\n } catch {\n // Key may not exist, that's fine\n }\n }\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { login } from '../../lib/auth.js';\nimport { configureNpmrc } from '../../lib/npmrc.js';\nimport { debug } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createAuthLoginCommand(): Command {\n const cmd = new Command('login');\n\n cmd\n .description('Login to Guild.ai')\n .option('--return-url <url>', 'Custom URL to redirect to after authentication')\n .option(\n '--return-label <text>',\n 'Friendly label for return button (e.g., \"VSCode\")'\n )\n .action(async (options: { returnUrl?: string; returnLabel?: string }) => {\n const output = createOutputWriter();\n const success = await login(options.returnUrl, options.returnLabel);\n if (success) {\n try {\n await configureNpmrc();\n output.progress('Configured registry in ~/.npmrc');\n } catch (error) {\n debug('npmrc configuration failed:', error);\n output.error('Could not configure npm registry in ~/.npmrc');\n }\n }\n process.exit(success ? 0 : 1);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { logout } from '../../lib/auth.js';\nimport { cleanupNpmrc } from '../../lib/npmrc.js';\nimport { debug } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createAuthLogoutCommand(): Command {\n const cmd = new Command('logout');\n\n cmd.description('Logout from Guild.ai').action(async () => {\n const output = createOutputWriter();\n await logout();\n try {\n await cleanupNpmrc();\n } catch (error) {\n debug('npmrc cleanup failed:', error);\n output.error('Could not clean up npm registry entries from ~/.npmrc');\n }\n process.exit(0);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { getAuthStatus } from '../../lib/auth.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { GuildCLIError, ErrorCodes } from '../../lib/errors.js';\nimport type { MeResponse } from '../../lib/api-types.js';\n\nexport function createAuthStatusCommand(): Command {\n const cmd = new Command('status');\n\n cmd.description('Check authentication status').action(async () => {\n const output = createOutputWriter();\n const { authenticated } = await getAuthStatus();\n\n if (!authenticated) {\n output.error('Not authenticated');\n process.exit(0);\n return;\n }\n\n // Try to fetch user profile for richer output\n try {\n const client = new GuildAPIClient();\n const me = await client.get<MeResponse>('/me');\n output.success(`Authenticated as ${me.name} (${me.id})`);\n } catch (error: unknown) {\n if (\n error instanceof GuildCLIError &&\n error.code === ErrorCodes.AUTH_TOKEN_INVALID\n ) {\n output.error('Not authenticated (token expired)', 'Run: guild auth login');\n } else {\n // Offline or other network error \u2014 fall back to simple message\n output.success('Authenticated');\n }\n }\n\n process.exit(0);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createAuthTokenCommand(): Command {\n const cmd = new Command('token');\n\n cmd.description('Print auth token to stdout (for scripting)').action(async () => {\n const output = createOutputWriter();\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n console.log(token);\n });\n\n return cmd;\n}\n", "// =============================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT MANUALLY\n// =============================================================================\n//\n// This file is generated by: cli/scripts/sync-types-from-python.py\n// Run that script after modifying Python enum definitions.\n//\n// =============================================================================\n\n// Source: python/guildcore/ent_schemas/third_party_service.py -> ThirdPartyService\nexport const WEBHOOK_SERVICES = [\n 'AZURE_DEVOPS',\n 'BITBUCKET',\n 'CURL',\n 'CYPRESS',\n 'GITHUB',\n 'GOOGLE_DOCS',\n 'GOOGLE_COMPUTE',\n 'GOOGLE_LOGGING',\n 'JIRA',\n 'LINEAR',\n 'NEWRELIC',\n 'NOTION',\n 'SLACK',\n 'TESTRAIL',\n 'ZENDESK',\n] as const;\nexport type WebhookService = (typeof WEBHOOK_SERVICES)[number];\n\n// Source: python/guildcore/ent_schemas/ent_workspace_trigger_time_schema.py -> TimeTriggerFrequency\nexport const TIME_TRIGGER_FREQUENCIES = [\n 'HOURLY',\n 'DAILY',\n 'WEEKLY',\n 'MONTHLY',\n 'CRON',\n] as const;\nexport type TimeTriggerFrequency = (typeof TIME_TRIGGER_FREQUENCIES)[number];\n\n// Source: python/guildcore/routes/serializers.py -> EventType\nexport const EVENT_TYPES = [\n 'user_message',\n 'agent_console',\n 'runtime_start',\n 'runtime_running',\n 'runtime_waiting',\n 'runtime_error',\n 'runtime_done',\n 'credentials_request',\n 'agent_install_request',\n 'agent_notification_message',\n 'agent_notification_progress',\n 'agent_notification_error',\n 'system_error',\n 'system_message',\n 'trigger_message',\n 'interrupted',\n 'llm_start',\n 'llm_done',\n] as const;\nexport type EventType = (typeof EVENT_TYPES)[number];\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Shared API response types for the Guild CLI.\n * These types match the responses from the guildcore API.\n *\n * All CLI commands should use these types for consistency.\n * Commands should passthrough API responses without transformation.\n */\n\n// =============================================================================\n// Status Enums\n// =============================================================================\n\nexport type AgentStatus = 'PENDING' | 'READY' | 'FAILED';\nexport type VersionStatus = 'DRAFT' | 'PUBLISHED';\nexport type ContextStatus = 'ACTIVE' | 'ARCHIVED';\n\n// =============================================================================\n// Base Entity Types\n// =============================================================================\n\n/**\n * Agent entity from the API.\n * Used by: agent list, agent get, agent clone, agent fork\n */\nexport interface Agent {\n id: string;\n name: string;\n full_name?: string;\n owner_id: string;\n owner?: { id: string; name: string; type: string };\n status: string;\n description: string | null;\n is_public?: boolean;\n is_archived?: boolean;\n git_url?: string;\n cached_likes_count?: number;\n created_at?: string;\n updated_at?: string;\n}\n\n/**\n * Owner entity from workspace responses.\n * Can be a user (personal) or organization (team).\n */\nexport interface WorkspaceOwner {\n id: string;\n type: 'user' | 'organization';\n name: string;\n avatar_url?: string;\n}\n\n/**\n * Workspace entity from the API.\n * Used by: workspace list, workspace get, workspace select\n */\nexport interface Workspace {\n id: string;\n name: string;\n full_name?: string;\n owner?: WorkspaceOwner;\n}\n\n/**\n * Workspace agent entity from the API.\n * Used by: workspace agent list, workspace agent add, workspace agent remove\n */\nexport interface WorkspaceAgent {\n id: string;\n agent: {\n id: string;\n name: string;\n full_name: string;\n };\n agent_version: {\n id: string;\n sha: string | null;\n version_number: string | null;\n };\n workspace?: {\n id: string;\n name: string;\n };\n is_default_chat_agent: boolean;\n should_autoupdate: boolean;\n}\n\n/**\n * Agent version entity from the API.\n * Used by: agent versions, agent save, agent fork\n *\n * Note: Some endpoints return versions with nested agent info,\n * others return just agent_id. Fields are optional to support both.\n */\nexport interface AgentVersion {\n id: string;\n agent_id?: string;\n author_id?: string;\n sha: string | null;\n summary: string;\n status: string;\n validation_status?: string;\n version_number?: string | null;\n version_type?: 'COMMITTED' | 'EPHEMERAL';\n published_at?: string | null;\n created_at: string;\n updated_at?: string;\n agent?: {\n id: string;\n name: string;\n };\n}\n\n/**\n * Validation step from the API.\n * Used by: agent publish (to show failure details)\n */\nexport interface ValidationStep {\n id: string;\n name: string;\n status: string;\n content?: string | null;\n started_at?: string | null;\n completed_at?: string | null;\n}\n\n/**\n * Response from /versions/{id}/validation/steps\n */\nexport interface ValidationStepsResponse {\n steps: ValidationStep[];\n}\n\n/**\n * Response from /versions/{id}/publish/steps\n */\nexport interface PublishStepsResponse {\n steps: ValidationStep[];\n}\n\n/**\n * Workspace context entity from the API.\n * Used by: workspace context list, get, edit\n */\nexport interface Context {\n id: string;\n status: string;\n summary: string | null;\n created_at: string;\n updated_at?: string;\n manual_context: string;\n generated_context: string;\n workspace_id: string;\n published_by_id: string | null;\n type: string;\n author_id?: string;\n task_id?: string;\n user_id?: string;\n}\n\n/**\n * Agent tags from the API.\n * Used by: agent tags list, add, remove, set\n */\nexport interface AgentTags {\n names: string[];\n}\n\n// =============================================================================\n// Pagination Types\n// =============================================================================\n\n/**\n * Standard pagination metadata from the API.\n * All paginated endpoints return this structure.\n */\nexport interface Pagination {\n total_count: number;\n limit: number;\n offset: number;\n has_more: boolean;\n}\n\n/** Default page size for standard list endpoints (matches backend). */\nexport const DEFAULT_PAGE_LIMIT = 20;\n\n/** Default page size for high-volume endpoints (events, tasks, operations). */\nexport const DEFAULT_PAGE_LIMIT_LARGE = 100;\n\n/**\n * Generic paginated response wrapper.\n * All list endpoints return { items: T[], pagination: Pagination }\n */\nexport interface PaginatedResponse<T> {\n items: T[];\n pagination: Pagination;\n}\n\n/**\n * Simpler counted response for endpoints that just return count + items.\n * Used by some endpoints that don't need full pagination metadata.\n */\nexport interface CountedResponse<T> {\n count: number;\n items: T[];\n}\n\n// =============================================================================\n// Specific Response Types (for convenience)\n// =============================================================================\n\nexport type AgentListResponse = PaginatedResponse<Agent>;\nexport type WorkspaceListResponse = PaginatedResponse<Workspace>;\nexport type VersionListResponse = PaginatedResponse<AgentVersion>;\nexport type ContextListResponse = PaginatedResponse<Context>;\nexport type WorkspaceAgentListResponse = PaginatedResponse<WorkspaceAgent>;\n\n// =============================================================================\n// Create/Update Response Types\n// =============================================================================\n\n/**\n * Response from creating a new agent.\n */\nexport interface CreateAgentResponse {\n id: string;\n name: string;\n owner_id: string;\n status: string;\n description: string | null;\n git_url: string;\n}\n\n/**\n * Response from creating a new workspace.\n */\nexport interface CreateWorkspaceResponse {\n id: string;\n name: string;\n}\n\n// =============================================================================\n// Single Version Response (with nested agent info)\n// =============================================================================\n\n/**\n * Single version response from GET /agents/:id/versions/:versionId\n * Includes nested agent info (different from list response).\n */\nexport interface AgentVersionDetail {\n id: string;\n sha: string;\n summary: string;\n agent: {\n id: string;\n name: string;\n description: string;\n };\n}\n\n// =============================================================================\n// Integration Types\n// =============================================================================\n\nexport interface TriggerIntegrationWebhookConfig {\n id: string;\n enabled: boolean;\n events: Record<string, string[]>;\n}\n\nexport interface TriggerIntegration {\n id: string;\n name: string;\n full_name: string;\n service?: string | null;\n webhook_config: TriggerIntegrationWebhookConfig | null;\n}\n\n// =============================================================================\n// Trigger Types\n// =============================================================================\n\nexport type TriggerType = 'webhook' | 'time';\n\n// Import and re-export generated types (from cli/scripts/sync-types-from-python.py)\nimport {\n WEBHOOK_SERVICES,\n type WebhookService,\n TIME_TRIGGER_FREQUENCIES,\n type TimeTriggerFrequency,\n} from './generated-types.js';\n\nexport {\n WEBHOOK_SERVICES,\n type WebhookService,\n TIME_TRIGGER_FREQUENCIES,\n type TimeTriggerFrequency,\n};\nexport type TriggerDisabledReason = 'user_deactivated' | 'missing_credentials';\n\n/**\n * Nested agent info in trigger responses.\n */\nexport interface TriggerAgent {\n id: string;\n name: string;\n full_name: string;\n}\n\n/**\n * Nested workspace agent info in trigger responses.\n */\nexport interface TriggerWorkspaceAgent {\n id: string;\n agent: {\n id: string;\n name: string;\n full_name: string;\n };\n agent_version: {\n id: string;\n sha: string | null;\n version_number: string | null;\n };\n}\n\n/**\n * Workspace owner as embedded in trigger API responses.\n */\nexport interface TriggerWorkspaceOwner {\n id: string;\n type: 'user' | 'organization';\n name: string;\n}\n\n/**\n * Workspace as embedded in trigger API responses.\n */\nexport interface TriggerWorkspace {\n id: string;\n name: string;\n owner: TriggerWorkspaceOwner;\n}\n\n/**\n * Webhook trigger - fires when a third-party service sends an event.\n * Used by: trigger list, trigger get, trigger create\n */\nexport interface TriggerWebhook {\n id: string;\n type: 'webhook';\n event_type: string | null;\n action: string | null;\n service_config?:\n | {\n workspace_slug?: string;\n repo_slug?: string;\n project?: string;\n jql_filter?: string;\n }\n | Record<string, unknown>;\n integration: TriggerIntegration;\n created_at: string;\n deactivated_at: string | null;\n disabled_reason: TriggerDisabledReason | null;\n agent: TriggerAgent;\n workspace_agent: TriggerWorkspaceAgent | null;\n workspace: TriggerWorkspace;\n}\n\n/**\n * Time trigger - fires on a schedule.\n * Used by: trigger list, trigger get, trigger create\n */\nexport interface TriggerTime {\n id: string;\n type: 'time';\n frequency: TimeTriggerFrequency;\n time_of_day: string | null;\n days_of_week: string[] | null;\n days_of_month: number[] | null;\n agent_input: Record<string, unknown>;\n next_run_at: string;\n created_at: string;\n deactivated_at: string | null;\n disabled_reason: TriggerDisabledReason | null;\n agent: TriggerAgent;\n workspace_agent: TriggerWorkspaceAgent | null;\n workspace: TriggerWorkspace;\n}\n\n/**\n * Discriminated union of trigger types.\n */\nexport type Trigger = TriggerWebhook | TriggerTime;\n\n/**\n * Session spawned by a trigger.\n * Used by: trigger sessions\n */\nexport interface TriggerSession {\n id: string;\n session_type: string;\n created_at: string;\n updated_at: string;\n workspace: {\n id: string;\n name: string;\n };\n}\n\nexport type TriggerListResponse = PaginatedResponse<Trigger>;\nexport type TriggerSessionListResponse = PaginatedResponse<TriggerSession>;\n\n// =============================================================================\n// User & Organization Types\n// =============================================================================\n\n/**\n * Current user info from GET /me.\n * Used by: agent owners, owner resolution\n */\nexport interface MeResponse {\n id: string;\n type: 'user';\n name: string;\n avatar_url: string | null;\n}\n\n/**\n * Organization the user belongs to.\n * Used by: agent owners, owner resolution\n */\nexport interface Organization {\n id: string;\n type: 'organization';\n name: string;\n avatar_url: string | null;\n viewer_role: 'ADMIN' | 'MEMBER' | null;\n}\n\nexport type OrganizationListResponse = PaginatedResponse<Organization>;\n\n// =============================================================================\n// Skill Types\n// =============================================================================\n\n/**\n * Skill entity from the API.\n * Used by: skill list, skill get, skill create, skill update\n */\nexport interface Skill {\n id: string;\n entity_type: string;\n type: 'skill';\n full_name: string;\n name: string;\n overview: string;\n is_public: boolean;\n avatar_url: string | null;\n owner: { id: string; name: string; type: string };\n viewer_can_edit: boolean;\n created_at: string;\n updated_at: string;\n latest_version?: SkillVersion | null;\n}\n\n/**\n * Skill version entity from the API.\n * Used by: skill version list, skill version get, skill version create\n */\nexport interface SkillVersion {\n id: string;\n entity_type: string;\n type: 'skill_version';\n version_number: string;\n description: string;\n body?: string;\n skill?: Skill;\n author?: { id: string; name: string };\n created_at: string;\n updated_at: string;\n}\n\nexport type SkillListResponse = PaginatedResponse<Skill>;\nexport type SkillVersionListResponse = PaginatedResponse<SkillVersion>;\n\n// =============================================================================\n// Credential Types\n// =============================================================================\n\nexport interface Credentials {\n id: string;\n integration: {\n id: string;\n name: string;\n full_name: string;\n };\n creator: {\n id: string;\n name: string;\n };\n created_at: string;\n updated_at: string;\n}\n\nexport type CredentialsListResponse = PaginatedResponse<Credentials>;\n\nexport interface CredentialsPolicy {\n id: string;\n decision: 'ALLOW' | 'DENY';\n operations: string[] | null;\n resources: Record<string, string[]> | null;\n workspaces: { id: string; name: string; full_name?: string }[];\n agents: { id: string; name: string; full_name?: string }[];\n created_at: string;\n updated_at: string;\n}\n\nexport type CredentialsPolicyListResponse = PaginatedResponse<CredentialsPolicy>;\n\n// =============================================================================\n// Task Types\n// =============================================================================\n\nexport type TaskStatus =\n | 'CREATED'\n | 'DISPATCHED'\n | 'STARTED'\n | 'RUNNING'\n | 'WAITING'\n | 'ERROR'\n | 'DONE'\n | 'INTERRUPTED';\n\nexport interface TokenUsage {\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n total_tokens: number;\n llm_call_count: number;\n}\n\ninterface TaskBase {\n id: string;\n entity_type: string;\n status: TaskStatus;\n token_usage: TokenUsage | null;\n created_at: string;\n updated_at: string;\n}\n\nexport interface TaskAgent extends TaskBase {\n entity_type: 'EntTaskAgent';\n agent: { name: string; full_name?: string } | null;\n version: { id: string; version_number?: string } | null;\n}\n\nexport interface TaskTool extends TaskBase {\n entity_type: 'EntTaskTool';\n tool_name: string;\n tool_call_id: string;\n request_bytes: number;\n response_bytes: number;\n http_status_code: number;\n}\n\nexport type Task = TaskAgent | TaskTool;\n\n// =============================================================================\n// Session Type (shared)\n// =============================================================================\n\n/**\n * Session entity from API responses.\n * Used by: session list\n */\nexport interface Session {\n id: string;\n session_type: 'chat' | 'agent_test' | 'time' | 'webhook';\n name?: string;\n workspace?: {\n id: string;\n name: string;\n };\n created_at: string;\n updated_at: string;\n}\n\n// =============================================================================\n// Job Types\n// =============================================================================\n\nexport type JobType = 'VALIDATION' | 'PUBLISH' | 'PUBLISH_PRE_CHECK';\nexport type JobStatus =\n | 'PENDING'\n | 'RUNNING'\n | 'SUCCEEDED'\n | 'FAILED'\n | 'ERRORED'\n | 'CANCELLED';\nexport type JobStepStatus =\n | 'PENDING'\n | 'RUNNING'\n | 'SUCCEEDED'\n | 'FAILED'\n | 'SKIPPED'\n | 'ERRORED';\n\n/**\n * Job entity from the API.\n * Used by: job get\n */\nexport interface Job {\n id: string;\n target_id: string;\n job_type: JobType;\n status: JobStatus;\n started_at: string | null;\n completed_at: string | null;\n error_message: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Job step entity from the API.\n * Used by: job get (steps table)\n */\nexport interface JobStep {\n id: string;\n job: Job;\n name: string;\n status: JobStepStatus;\n started_at: string | null;\n completed_at: string | null;\n content: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Response from GET /jobs/:id/steps.\n */\nexport interface JobStepsResponse {\n job_id: string;\n steps: JobStep[];\n}\n\n// =============================================================================\n// Integration Types\n// =============================================================================\n\nexport interface IntegrationOwner {\n id: string;\n name: string;\n}\n\nexport interface IntegrationAuthConfig {\n id: string;\n entity_type: string;\n auth_scheme: 'API_KEY' | 'OAUTH';\n token_header_template?: string;\n install_url?: string;\n token_url?: string;\n client_id?: string;\n scopes?: string[];\n}\n\nexport interface IntegrationProtocolConfig {\n protocol: 'REST';\n base_url: string;\n}\n\nexport interface IntegrationWebhookConfig {\n enabled: boolean;\n events?: string[];\n}\n\nexport interface IntegrationPublishedVersion {\n id: string;\n version_number: string;\n published_at: string;\n}\n\nexport interface Integration {\n id: string;\n entity_type: string;\n created_at: string;\n updated_at: string;\n name: string;\n description: string | null;\n is_public: boolean;\n avatar_url: string | null;\n owner: IntegrationOwner;\n auth_config: IntegrationAuthConfig;\n protocol_config: IntegrationProtocolConfig;\n webhook_config: IntegrationWebhookConfig | null;\n params: unknown[];\n viewer_can_edit: boolean;\n latest_published_version?: IntegrationPublishedVersion | null;\n}\n\nexport type IntegrationListResponse = PaginatedResponse<Integration>;\n\nexport interface IntegrationVersion {\n id: string;\n entity_type: string;\n created_at: string;\n updated_at: string;\n author: { id: string; name: string };\n validation_status: string;\n published_at: string | null;\n publishing_started_at: string | null;\n version_number: string | null;\n integration?: {\n id: string;\n name: string;\n description: string;\n };\n}\n\nexport type IntegrationVersionListResponse = PaginatedResponse<IntegrationVersion>;\n\n// =============================================================================\n// Local Config Types\n// =============================================================================\n\n/**\n * Contents of guild.json file in agent directories.\n */\nexport interface GuildConfig {\n agent_id: string;\n name: string;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatAgentTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { AgentListResponse, MeResponse } from '../../lib/api-types.js';\n\nconst SORT_MAP: Record<string, string> = {\n updated: 'updated_at',\n newest: 'created_at',\n name: 'name',\n popular: 'cached_likes_count',\n};\n\nexport function createAgentListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List agents')\n .option('--search <query>', 'Search agents by name or description')\n .option(\n '--sort <field>',\n 'Sort by: name, updated, newest, popular (default: name)',\n 'name'\n )\n .option('--published', 'Only show published agents')\n .option('--archived', 'Show only archived agents')\n .option('--all', 'Show all agents including archived')\n .option(\n '--owner <name>',\n 'Filter by owner (user or org name). Without this flag, lists your own agents'\n )\n .option('--workspace <id>', 'Filter agents by workspace ID or name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (options: {\n search?: string;\n sort: string;\n published?: boolean;\n archived?: boolean;\n all?: boolean;\n owner?: string;\n workspace?: string;\n limit: string;\n offset: string;\n }) => {\n const output = createOutputWriter();\n\n if (options.archived && options.all) {\n output.error(\n '--archived and --all are mutually exclusive',\n 'Use --archived to show only archived agents, or --all to show all agents including archived'\n );\n process.exit(1);\n }\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n if (options.search) {\n params.append('search', options.search);\n }\n if (options.published) {\n params.append('published_only', 'true');\n }\n\n const sortField = SORT_MAP[options.sort];\n if (sortField) {\n params.append('sort_by', sortField);\n }\n\n // Determine the right endpoint:\n // - --workspace \u2192 GET /agents?for_workspace=... (global, workspace-scoped)\n // - --owner \u2192 GET /users/{owner}/agents or /organizations/{owner}/agents\n // - default \u2192 GET /users/{me}/agents (same as web)\n let endpoint: string;\n const showArchived = options.all || options.archived;\n\n if (options.workspace) {\n // Workspace filter uses the global endpoint\n params.append('for_workspace', options.workspace);\n endpoint = `/agents?${params.toString()}`;\n } else {\n // Use scoped endpoint (matches web frontend pattern)\n if (options.archived) {\n params.append('include_archived', 'true');\n } else if (options.all) {\n params.append('include_archived', 'true');\n }\n\n const ownerName =\n options.owner ?? (await client.get<MeResponse>('/me')).name;\n endpoint = `/users/${encodeURIComponent(ownerName)}/agents?${params.toString()}`;\n }\n\n const response = await client.get<AgentListResponse>(endpoint);\n\n // When --archived is used, filter to only archived agents client-side\n // (the backend only supports include_archived, not archived_only)\n if (options.archived) {\n response.items = response.items.filter((a) => a.is_archived);\n }\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatAgentTable(response.items, response.pagination, showArchived);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n if (options.workspace) {\n output.error('Workspace not found');\n } else if (options.owner) {\n output.error(`Owner not found: ${options.owner}`);\n } else {\n output.error('Not found');\n }\n process.exit(1);\n }\n\n output.error(`Failed to list agents: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Agent } from '../../lib/api-types.js';\n\nexport function createAgentGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get agent details')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .action(async (idArg: string | undefined) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n // Get agent ID from argument or guild.json\n const { agentId } = await getAgentId(idArg);\n\n const client = new GuildAPIClient();\n const resolvedId = await resolveAgentRef(client, agentId);\n const response = await client.get<Agent>(`/agents/${resolvedId}`);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get agent: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport * as readline from 'readline';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { isInteractive } from '../../lib/stdin.js';\n\ninterface UpdateOptions {\n public?: boolean;\n private?: boolean;\n yes?: boolean;\n}\n\nasync function confirmVisibilityChange(\n agentName: string,\n makePublic: boolean\n): Promise<boolean> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const action = makePublic ? 'PUBLIC' : 'PRIVATE';\n const warning = makePublic\n ? 'This will make the agent visible to everyone.\\nWarning: Once public, an agent cannot be made private again.'\n : 'This will hide the agent from public discovery.';\n\n return new Promise((resolve) => {\n rl.question(\n `\\nAre you sure you want to make \"${agentName}\" ${action}?\\n${warning}\\n\\nContinue? [y/N] `,\n (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n }\n );\n });\n}\n\nexport function createAgentUpdateCommand(): Command {\n const cmd = new Command('update');\n\n cmd\n .description('Update agent properties (visibility)')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .option('--public', 'Make the agent public (visible to everyone)')\n .option('--private', 'Make the agent private (only visible to owner)')\n .option('--yes', 'Skip confirmation prompt for visibility changes')\n .action(async (identifierArg: string | undefined, options: UpdateOptions) => {\n const output = createOutputWriter();\n\n // Validate that at least one option is provided\n if (!options.public && !options.private) {\n output.error(\n 'No update options provided.',\n 'Usage: guild agent update [identifier] [options]\\n\\nOptions:\\n --public Make the agent public\\n --private Make the agent private\\n --yes Skip confirmation prompt\\n\\nExamples:\\n guild agent update my-agent --public\\n guild agent update my-agent --private --yes\\n guild agent update --public (uses guild.json)\\n\\nNote: Agent descriptions are set from README.md when publishing.'\n );\n process.exit(1);\n }\n\n // Validate that --public and --private are not both specified\n if (options.public && options.private) {\n output.error('Cannot specify both --public and --private');\n process.exit(1);\n }\n\n const { agentId } = await getAgentId(identifierArg);\n const client = new GuildAPIClient();\n\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n // Fetch current agent info for confirmation prompts\n const agent = await client.get<{\n id: string;\n name: string;\n full_name: string;\n is_public: boolean;\n }>(`/agents/${resolvedId}`);\n\n // Handle visibility change confirmation\n const changingVisibility = options.public || options.private;\n if (changingVisibility) {\n const makePublic = Boolean(options.public);\n\n // Check if already in desired state\n if (agent.is_public === makePublic) {\n output.progress(\n `Agent \"${agent.full_name}\" is already ${makePublic ? 'public' : 'private'}.`\n );\n process.exit(0);\n }\n\n // Confirm unless --yes is specified\n if (!options.yes) {\n if (!isInteractive()) {\n output.error(\n 'Confirmation required for visibility changes.',\n 'Use --yes to skip confirmation in non-interactive mode:\\n guild agent update ' +\n (identifierArg ?? '') +\n (makePublic ? ' --public' : ' --private') +\n ' --yes'\n );\n process.exit(1);\n }\n const confirmed = await confirmVisibilityChange(\n agent.full_name,\n makePublic\n );\n if (!confirmed) {\n output.progress('Cancelled.');\n process.exit(0);\n }\n }\n }\n\n // Build update payload\n const updatePayload: { is_public?: boolean } = {};\n if (options.public) {\n updatePayload.is_public = true;\n }\n if (options.private) {\n updatePayload.is_public = false;\n }\n\n const result = await client.patch<{\n id: string;\n name: string;\n full_name: string;\n owner_id: string;\n status: string;\n description: string;\n is_public: boolean;\n }>(`/agents/${resolvedId}`, updatePayload);\n\n // Build success message\n const changes: string[] = [];\n if (changingVisibility) {\n changes.push(`visibility: ${result.is_public ? 'public' : 'private'}`);\n }\n\n output.data({\n success: 'Agent updated',\n id: result.id,\n full_name: result.full_name,\n is_public: result.is_public,\n changes: changes,\n });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not logged in.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Agent not found: ${agentId}`,\n 'Check the agent ID:\\n guild agent list'\n );\n } else {\n output.error(`Failed to update agent: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getGuildcoreUrl } from '../../lib/config.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatVersionTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { VersionListResponse } from '../../lib/api-types.js';\n\nexport function createAgentVersionsCommand(): Command {\n const cmd = new Command('versions');\n\n cmd\n .description('List all versions of an agent')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .option(\n '--limit <number>',\n `Maximum number of versions to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Number of versions to skip (default: 0)', '0')\n .action(\n async (\n agentIdArg: string | undefined,\n options: { limit: string; offset: string }\n ) => {\n const output = createOutputWriter();\n\n // Get agent ID from argument or guild.json\n const { agentId } = await getAgentId(agentIdArg);\n\n const baseUrl = getGuildcoreUrl();\n const client = new GuildAPIClient({ baseUrl });\n\n const limit = parseInt(options.limit, 10);\n const offset = parseInt(options.offset, 10);\n\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n const result = await client.get<VersionListResponse>(\n `/agents/${resolvedId}/versions?limit=${limit}&offset=${offset}`\n );\n\n if (isMachineReadable()) {\n output.data(result);\n } else {\n formatVersionTable(result.items, result.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not logged in.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Agent not found: ${agentId}`,\n 'Check the agent ID:\\n guild agent list'\n );\n } else {\n output.error(`Failed to list agent versions: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { getAuthenticatedUrl } from '../../lib/auth.js';\nimport { runGit, GitError, formatGitError } from '../../lib/git.js';\nimport { waitForValidation, waitForPublish } from '../../lib/version-helpers.js';\nimport type { GuildConfig, AgentVersion } from '../../lib/api-types.js';\n\nexport function createAgentSaveCommand(): Command {\n const cmd = new Command('save');\n\n cmd\n .description('Commit, push, and create a new agent version')\n .option('-A, --all', 'Stage all changes and commit before pushing', false)\n .option('-m, --message <text>', 'Commit message (required with --all)')\n .option(\n '--wait',\n 'Wait for validation to complete before returning (default: returns immediately)',\n false\n )\n .option(\n '--publish',\n 'Publish after validation passes (implies --wait) (default: does not publish)',\n false\n )\n .option(\n '--bump [level]',\n 'Bump package.json version before saving (patch, or minor/major) (default: patch)',\n 'patch'\n )\n .option('--no-bump', 'Skip automatic version bump')\n .action(\n async (options: {\n all: boolean;\n message?: string;\n wait: boolean;\n publish: boolean;\n bump: string | boolean;\n }) => {\n const cwd = process.cwd();\n let guildConfig: GuildConfig | null = null;\n const output = createOutputWriter();\n\n // Resolve bump level: bare --bump defaults to 'patch', --no-bump skips\n const bumpLevel =\n options.bump === true || options.bump === 'patch'\n ? 'patch'\n : options.bump === 'minor'\n ? 'minor'\n : options.bump === 'major'\n ? 'major'\n : options.bump === false\n ? null\n : null;\n\n if (options.bump !== false && bumpLevel === null) {\n output.error(\n `Invalid bump level: ${String(options.bump)}`,\n 'Valid levels are: patch, minor, major\\n guild agent save --bump minor'\n );\n process.exit(1);\n }\n\n // With --all, a commit message is required (unless bump auto-generates one)\n if (options.all && !options.message && !bumpLevel) {\n output.error(\n 'Commit message is required with --all',\n 'Provide a message describing your changes:\\n guild agent save -A --message \"Add new feature\"'\n );\n process.exit(1);\n }\n\n let versionNumber: string | undefined;\n\n try {\n // Check for guild.json\n const guildJsonPath = path.join(cwd, 'guild.json');\n const guildJsonExists = await fs\n .access(guildJsonPath)\n .then(() => true)\n .catch(() => false);\n\n if (!guildJsonExists) {\n output.error(\n 'Not in an agent directory',\n 'guild.json not found in current directory.\\n\\nInitialize an agent directory:\\n guild agent init --name my-agent\\n\\nOr clone an existing agent:\\n guild agent clone <agent-id>'\n );\n process.exit(1);\n }\n\n // Read guild.json\n guildConfig = JSON.parse(await fs.readFile(guildJsonPath, 'utf-8'));\n\n // Handle --bump: bump package.json version before git operations\n if (bumpLevel) {\n const packageJsonPath = path.join(cwd, 'package.json');\n let packageJsonContent: string;\n try {\n packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n } catch {\n output.error(\n 'package.json not found',\n 'A package.json file is required in the agent directory to use --bump.'\n );\n process.exit(1);\n }\n\n const packageJson = JSON.parse(packageJsonContent) as {\n version?: string;\n [key: string]: unknown;\n };\n const currentVersion = packageJson.version || '0.0.0';\n\n const parts = currentVersion.split('.').map(Number);\n if (parts.length !== 3 || parts.some((p) => isNaN(p))) {\n output.error(\n `Cannot bump invalid version: ${currentVersion}`,\n 'package.json version must be in MAJOR.MINOR.PATCH format (e.g. 1.0.0)'\n );\n process.exit(1);\n }\n const [major, minor, patch] = parts;\n let newVersion: string;\n if (bumpLevel === 'major') {\n newVersion = `${major + 1}.0.0`;\n } else if (bumpLevel === 'minor') {\n newVersion = `${major}.${minor + 1}.0`;\n } else {\n newVersion = `${major}.${minor}.${patch + 1}`;\n }\n\n packageJson.version = newVersion;\n await fs.writeFile(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + '\\n'\n );\n versionNumber = newVersion;\n output.progress(`\u2713 Bumped version: ${currentVersion} \u2192 ${newVersion}`);\n } else {\n // No bump \u2014 read version from package.json if it exists\n const packageJsonPath = path.join(cwd, 'package.json');\n try {\n const pkg = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')) as {\n version?: string;\n };\n if (pkg.version) {\n versionNumber = pkg.version;\n }\n } catch {\n // No package.json or unreadable \u2014 version stays undefined\n }\n }\n\n // Check for uncommitted changes and unpushed commits\n const { stdout: statusOutput } = await runGit(['status', '--porcelain'], {\n cwd,\n });\n\n const hasUncommittedChanges = statusOutput.trim().length > 0;\n let hasUnpushedCommits = false;\n\n // Check for unpushed commits\n try {\n const { stdout: branchForCheck } = await runGit(\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n { cwd }\n );\n const { stdout: unpushed } = await runGit(\n ['log', `origin/${branchForCheck.trim()}..HEAD`, '--oneline'],\n { cwd }\n );\n hasUnpushedCommits = unpushed.trim().length > 0;\n } catch {\n // No remote tracking branch yet \u2014 if HEAD has commits, treat\n // as unpushed so the push flow can create the remote branch.\n try {\n const { stdout: logOutput } = await runGit(['log', '--oneline', '-1'], {\n cwd,\n });\n hasUnpushedCommits = logOutput.trim().length > 0;\n } catch {\n hasUnpushedCommits = false;\n }\n }\n\n // --bump implies --all (the version change needs to be committed)\n const shouldStageAll = options.all || !!bumpLevel;\n\n if (shouldStageAll) {\n // Stage and commit before pushing\n if (hasUncommittedChanges) {\n await runGit(['add', '-A'], { cwd });\n output.progress('\u2713 Staged changes');\n\n const commitMsg = options.message || (bumpLevel ? `Bump version` : '');\n await runGit(['commit', '-m', commitMsg], { cwd });\n output.progress('\u2713 Committed locally');\n hasUnpushedCommits = true;\n }\n } else {\n // Default: push-only, no staging or committing\n if (!hasUnpushedCommits && hasUncommittedChanges) {\n output.error(\n 'Uncommitted changes',\n 'You have uncommitted changes. Either commit them first:\\n git add . && git commit -m \"your message\"\\n\\nOr use --all to stage and commit automatically:\\n guild agent save -A --message \"your message\"'\n );\n process.exit(1);\n }\n }\n\n if (!hasUnpushedCommits) {\n output.error(\n 'No changes to save',\n 'Working tree is clean and there are no unpushed commits.'\n );\n process.exit(1);\n }\n\n // Resolve version summary: use --message if provided, otherwise\n // extract the latest commit message.\n let versionMessage = options.message;\n if (!versionMessage) {\n const { stdout: commitMsg } = await runGit(['log', '-1', '--pretty=%s'], {\n cwd,\n });\n versionMessage = commitMsg.trim();\n }\n\n // Get remote URL with auth credentials\n const { stdout: remoteUrl } = await runGit(['remote', 'get-url', 'origin'], {\n cwd,\n });\n const authenticatedUrl = await getAuthenticatedUrl(remoteUrl.trim());\n if (!authenticatedUrl) {\n output.error('Not authenticated.', 'Run: guild auth login');\n process.exit(1);\n }\n\n // Get current branch name\n const { stdout: branchName } = await runGit(\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n {\n cwd,\n }\n );\n const currentBranch = branchName.trim();\n\n // Pull remote changes first (rebase to avoid merge commits)\n const gitEnv = { GUILD_AGENT_SAVE: '1' };\n try {\n const { stdout: pullOutput } = await runGit(\n ['pull', '--rebase', authenticatedUrl, currentBranch],\n { cwd, env: gitEnv }\n );\n if (\n pullOutput.includes('Updating') ||\n pullOutput.includes('Fast-forward')\n ) {\n output.progress('\u2713 Synced with remote');\n }\n } catch (pullError: unknown) {\n const errMessage =\n pullError instanceof GitError\n ? pullError.stderr || pullError.stdout\n : String(pullError);\n // Check for rebase conflicts\n if (\n errMessage.includes('CONFLICT') ||\n errMessage.includes('could not apply')\n ) {\n output.error(\n 'Merge conflict detected',\n 'Your changes conflict with remote changes.\\n\\nTo resolve:\\n 1. Fix conflicts in the listed files\\n 2. git add <resolved-files>\\n 3. git rebase --continue\\n 4. guild agent save --message \"...\"\\n\\nOr abort the rebase:\\n git rebase --abort'\n );\n process.exit(1);\n }\n\n // If pull fails, check if it's because there's no upstream\n if (\n !errMessage.includes('no tracking information') &&\n !errMessage.includes(\"couldn't find remote ref\")\n ) {\n // Real error we don't understand\n output.error('Failed to sync with remote', errMessage);\n process.exit(1);\n }\n // No upstream branch yet, that's fine - first push will set it\n }\n\n // Push to remote using authenticated URL\n // Note: We push to the URL directly (not via origin remote) because\n // origin doesn't have auth credentials. This means we must manually\n // update the remote-tracking ref afterward.\n //\n // Retry on transient server-side errors (e.g. GitHub returning\n // \"fatal error in commit_refs\" when the repo isn't fully ready).\n const maxPushAttempts = 3;\n for (let attempt = 1; attempt <= maxPushAttempts; attempt++) {\n try {\n await runGit(['push', authenticatedUrl, `HEAD:${currentBranch}`], {\n cwd,\n env: gitEnv,\n });\n break;\n } catch (pushError: unknown) {\n const msg =\n pushError instanceof GitError\n ? pushError.stderr || pushError.stdout\n : String(pushError);\n const isTransient =\n msg.includes('commit_refs') ||\n msg.includes('remote rejected') ||\n msg.includes('Service Unavailable') ||\n msg.includes('502') ||\n msg.includes('503');\n if (!isTransient || attempt === maxPushAttempts) {\n throw pushError;\n }\n const delaySec = attempt * 2;\n output.progress(\n `Push failed (attempt ${attempt}/${maxPushAttempts}), retrying in ${delaySec}s...`\n );\n await new Promise((resolve) => setTimeout(resolve, delaySec * 1000));\n }\n }\n // Update origin's remote-tracking ref so git status stays consistent.\n // Pushing via URL doesn't update refs/remotes/origin/*, which causes\n // \"branch is ahead of origin/<branch>\" confusion.\n try {\n await runGit(\n ['update-ref', `refs/remotes/origin/${currentBranch}`, 'HEAD'],\n { cwd }\n );\n } catch {\n // Non-fatal: git status will be stale but save still succeeded\n }\n // Set up tracking for future operations\n try {\n await runGit(['branch', '--set-upstream-to', `origin/${currentBranch}`], {\n cwd,\n });\n } catch {\n // Ignore if branch tracking already set or doesn't exist on remote yet\n }\n output.progress('\u2713 Pushed to remote');\n\n // Get final commit SHA (after potential rebase)\n const { stdout: shaOutput } = await runGit(['rev-parse', 'HEAD'], {\n cwd,\n });\n const commitSha = shaOutput.trim();\n\n // Create version in guildcore (always as DRAFT, publish happens separately)\n const client = new GuildAPIClient();\n const agentId = guildConfig?.agent_id;\n if (!agentId) {\n output.error('Not in an agent directory');\n process.exit(1);\n }\n\n let version = await client.post<AgentVersion>(`/agents/${agentId}/versions`, {\n commit_sha: commitSha,\n summary: versionMessage,\n version_type: 'COMMITTED',\n ...(versionNumber ? { version_number: versionNumber } : {}),\n });\n\n output.progress(`\u2713 Created version (${version.id})`);\n\n if (options.wait || options.publish) {\n version = await waitForValidation(version.id, output);\n }\n\n if (options.publish) {\n output.progress('Validation passed, publishing...');\n version = await client.post<AgentVersion>(\n `/versions/${version.id}/publish`,\n {}\n );\n\n if (options.wait && version.status !== 'PUBLISHED') {\n version = await waitForPublish(version.id, output);\n } else {\n output.progress('\u2713 Published');\n }\n }\n\n output.progress('');\n output.progress('Version details:');\n output.progress(` ID: ${version.id}`);\n output.progress(` SHA: ${version.sha ? version.sha.substring(0, 12) : '-'}`);\n output.progress(` Status: ${version.status}`);\n if (version.published_at) {\n output.progress(` Published at: ${version.published_at}`);\n }\n output.progress(` Summary: ${version.summary}`);\n\n if (options.publish && version.status === 'PUBLISHED') {\n output.progress('');\n output.progress('Version is now published and available in the catalog.');\n } else if (options.publish) {\n output.progress('');\n output.progress(\n 'Publish is in progress. Use --wait to wait for completion.'\n );\n } else {\n output.progress('');\n output.progress('To publish this version:');\n output.progress(' guild agent save --message \"...\" --publish');\n }\n\n // Output JSON to stdout only in --json mode.\n // In interactive mode the progress messages above already\n // show version details; dumping raw JSON is noise.\n if (isMachineReadable()) {\n output.data({ version });\n }\n } catch (error: unknown) {\n if (error instanceof GitError) {\n output.error('Git operation failed', formatGitError(error));\n process.exit(1);\n }\n\n // Handle API errors\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Agent not found${guildConfig ? ': ' + guildConfig.agent_id : ''}`,\n 'The agent may have been deleted.'\n );\n process.exit(1);\n }\n\n if (formattedError.details.includes('does not exist')) {\n output.error(\n 'Commit not found in repository',\n \"This might mean:\\n \u2022 The commit wasn't pushed to the remote repository\\n \u2022 The git remote is configured incorrectly\\n \u2022 There's a sync issue with the backend\\n\\nVerify the commit exists:\\n git log --oneline\\n\\nVerify the remote:\\n git remote -v\"\n );\n process.exit(1);\n }\n\n output.error(`Failed to save agent: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GuildAPIClient } from './api-client.js';\nimport { pollUntilComplete } from './polling.js';\nimport type { OutputWriter } from './output.js';\nimport type {\n AgentVersion,\n PublishStepsResponse,\n ValidationStep,\n ValidationStepsResponse,\n} from './api-types.js';\n\n/**\n * Format a list of validation steps into a compact single-line status string\n * suitable for spinner text, e.g. `\u2713 build \u27F3 test \u25CB deploy`.\n * Returns null when the steps array is empty so callers can fall back to the\n * default attempt-counter text.\n */\nfunction formatStepProgress(steps: ValidationStep[]): string | null {\n if (steps.length === 0) return null;\n\n const tokens = steps.map((step) => {\n let prefix: string;\n switch (step.status) {\n case 'SUCCEEDED':\n prefix = '\u2713';\n break;\n case 'RUNNING':\n prefix = '\u27F3';\n break;\n case 'FAILED':\n prefix = '\u2717';\n break;\n default:\n prefix = '\u25CB';\n }\n return `${prefix} ${step.name}`;\n });\n\n return tokens.join(' ');\n}\n\n/**\n * Poll until a version's validation completes, then check the result.\n * Exits the process on timeout or validation failure.\n * Returns the updated version on success.\n */\nexport async function waitForValidation(\n versionId: string,\n output: OutputWriter\n): Promise<AgentVersion> {\n const client = new GuildAPIClient();\n\n const pollResult = await pollUntilComplete<AgentVersion>({\n resourceId: versionId,\n endpoint: `/versions/${versionId}`,\n isComplete: (response) =>\n response.validation_status !== 'PENDING' &&\n response.validation_status !== 'RUNNING',\n message: 'Waiting for validation to complete...',\n successMessage: 'Validation complete',\n timeoutMessage: 'Validation timed out',\n maxAttempts: 180,\n delayMs: 1000,\n onPoll: async () => {\n const r = await client.get<ValidationStepsResponse>(\n `/versions/${versionId}/validation/steps`\n );\n return formatStepProgress(r.steps);\n },\n });\n\n if (!pollResult.success || !pollResult.response) {\n output.error(\n 'Validation did not complete in time',\n 'Check status manually:\\n guild agent versions'\n );\n process.exit(1);\n }\n\n const version = pollResult.response;\n\n if (version.validation_status === 'FAILED') {\n const details = await fetchValidationFailureDetails(version.id);\n output.error('Validation failed', details);\n process.exit(1);\n }\n\n return version;\n}\n\n/**\n * Fetch validation step details for a failed version.\n * Shows content from all steps (not just failed) so the full build output is visible.\n */\nasync function fetchValidationFailureDetails(versionId: string): Promise<string> {\n const client = new GuildAPIClient();\n let failureDetails = '';\n\n try {\n const stepsResponse = await client.get<ValidationStepsResponse>(\n `/versions/${versionId}/validation/steps`\n );\n\n if (stepsResponse.steps.length > 0) {\n failureDetails = stepsResponse.steps\n .map((step) => {\n let icon: string;\n switch (step.status) {\n case 'SUCCEEDED':\n icon = '\u2713';\n break;\n case 'FAILED':\n case 'ERRORED':\n icon = '\u2717';\n break;\n case 'RUNNING':\n icon = '\u27F3';\n break;\n default:\n icon = '\u25CB';\n }\n const header = `${icon} ${step.name} [${step.status}]`;\n return step.content ? `${header}\\n${step.content}` : header;\n })\n .join('\\n\\n');\n } else {\n failureDetails = 'No steps found. Check validation logs for details.';\n }\n } catch {\n failureDetails = 'Could not fetch validation details.';\n }\n\n failureDetails +=\n '\\n\\nFix the issues, then save a new version:\\n guild agent save --message \"Fix validation errors\"';\n return failureDetails;\n}\n\n/**\n * Poll until a version's publish completes (PUBLISHING \u2192 PUBLISHED).\n * Exits the process on timeout or failure.\n * Returns the updated version on success.\n */\nexport async function waitForPublish(\n versionId: string,\n output: OutputWriter\n): Promise<AgentVersion> {\n const client = new GuildAPIClient();\n\n const pollResult = await pollUntilComplete<AgentVersion>({\n resourceId: versionId,\n endpoint: `/versions/${versionId}`,\n isComplete: (response) =>\n response.status === 'PUBLISHED' || response.status === 'FAILED',\n message: 'Waiting for publish to complete...',\n successMessage: 'Published',\n timeoutMessage: 'Publish timed out',\n maxAttempts: 60,\n delayMs: 1000,\n onPoll: async () => {\n const r = await client.get<PublishStepsResponse>(\n `/versions/${versionId}/publish/steps`\n );\n return formatStepProgress(r.steps);\n },\n });\n\n if (!pollResult.success || pollResult.response?.status !== 'PUBLISHED') {\n output.error(\n 'Publish did not complete in time',\n 'Check status manually:\\n guild agent versions'\n );\n process.exit(1);\n }\n\n return pollResult.response;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { getAuthenticatedUrl } from '../../lib/auth.js';\nimport { runGit, GitError, formatGitError } from '../../lib/git.js';\nimport type {\n GuildConfig,\n Agent,\n AgentVersion,\n PaginatedResponse,\n} from '../../lib/api-types.js';\n\nexport function createAgentPullCommand(): Command {\n const cmd = new Command('pull');\n\n cmd.description('Pull remote changes into local agent directory').action(async () => {\n const cwd = process.cwd();\n const output = createOutputWriter();\n\n try {\n // Check for guild.json\n const guildJsonPath = path.join(cwd, 'guild.json');\n const guildJsonExists = await fs\n .access(guildJsonPath)\n .then(() => true)\n .catch(() => false);\n\n if (!guildJsonExists) {\n output.error(\n 'Not in an agent directory',\n 'guild.json not found in current directory.\\n\\nInitialize an agent directory:\\n guild agent init --name my-agent\\n\\nOr clone an existing agent:\\n guild agent clone <agent-id>'\n );\n process.exit(1);\n }\n\n // Read guild.json\n const guildConfig: GuildConfig = JSON.parse(\n await fs.readFile(guildJsonPath, 'utf-8')\n );\n\n // Fetch agent to get git_url\n const client = new GuildAPIClient();\n const agent = await client.get<Agent>(`/agents/${guildConfig.agent_id}`);\n\n if (!agent.git_url) {\n output.error(\n 'Agent does not have a git repository',\n 'This agent may not have been initialized with git.'\n );\n process.exit(1);\n }\n\n // Get authenticated URL\n const authenticatedUrl = await getAuthenticatedUrl(agent.git_url);\n if (!authenticatedUrl) {\n output.error('Not authenticated.', 'Run: guild auth login');\n process.exit(1);\n }\n\n // Get current branch name\n const { stdout: branchName } = await runGit(\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n { cwd }\n );\n const currentBranch = branchName.trim();\n\n // Pull remote changes with rebase\n let gitPulledNewCommits = false;\n try {\n const { stdout: pullOutput } = await runGit(\n ['pull', '--rebase', authenticatedUrl, currentBranch],\n { cwd }\n );\n\n // Update remote-tracking ref so git status stays consistent\n try {\n await runGit(\n ['update-ref', `refs/remotes/origin/${currentBranch}`, 'FETCH_HEAD'],\n { cwd }\n );\n } catch {\n // Non-fatal: git status will be stale but pull still succeeded\n }\n\n if (\n pullOutput.includes('Already up to date') ||\n pullOutput.includes('Current branch') // \"Current branch X is up to date.\"\n ) {\n // Don't report yet \u2014 version check below may have more to say\n } else {\n gitPulledNewCommits = true;\n // Count commits pulled\n const updateMatch = pullOutput.match(/Updating\\s+[a-f0-9]+\\.\\.[a-f0-9]+/);\n const fastForward = pullOutput.includes('Fast-forward');\n let message = 'Pulled remote changes';\n\n if (fastForward || updateMatch) {\n const filesMatch = pullOutput.match(/(\\d+)\\s+files?\\s+changed/);\n if (filesMatch) {\n message = `Pulled remote changes (${filesMatch[1]} files changed)`;\n }\n }\n\n output.progress(`\u2713 ${message}`);\n }\n } catch (pullError: unknown) {\n const errMessage =\n pullError instanceof GitError\n ? pullError.stderr || pullError.stdout\n : String(pullError);\n\n // Check for rebase conflicts\n if (errMessage.includes('CONFLICT') || errMessage.includes('could not apply')) {\n output.error(\n 'Merge conflict detected',\n 'Your changes conflict with remote changes.\\n\\nTo resolve:\\n 1. Fix conflicts in the listed files\\n 2. git add <resolved-files>\\n 3. git rebase --continue\\n\\nOr abort the rebase:\\n git rebase --abort'\n );\n process.exit(1);\n }\n\n // No upstream branch \u2014 nothing to pull\n if (\n errMessage.includes('no tracking information') ||\n errMessage.includes(\"couldn't find remote ref\")\n ) {\n output.progress('\u2713 Already up to date (no remote branch yet)');\n if (isMachineReadable()) {\n output.data({\n success: true,\n message: 'Already up to date (no remote branch yet)',\n });\n }\n return;\n }\n\n // Unknown git error\n throw pullError;\n }\n\n // Version check: compare local state against backend\n const versions = await client.get<PaginatedResponse<AgentVersion>>(\n `/agents/${guildConfig.agent_id}/versions?limit=1`\n );\n\n if (versions.items.length > 0) {\n const latest = versions.items[0];\n const { stdout: headSha } = await runGit(['rev-parse', 'HEAD'], { cwd });\n const localHead = headSha.trim();\n\n if (latest.sha && latest.sha === localHead) {\n // Truly up to date \u2014 git pull + version match\n if (!gitPulledNewCommits) {\n output.progress('\u2713 Already up to date');\n }\n if (isMachineReadable()) {\n output.data({\n success: true,\n message: gitPulledNewCommits\n ? 'Pulled remote changes'\n : 'Already up to date',\n });\n }\n } else if (latest.sha && latest.sha !== localHead) {\n // SHA mismatch \u2014 warn user\n output.progress(\n `\u26A0 Remote has a newer version (${latest.sha.slice(0, 7)}) not on this branch`\n );\n output.progress(' Try: git fetch origin && git log --oneline origin/main');\n if (isMachineReadable()) {\n output.data({\n success: true,\n message: 'SHA mismatch with latest version',\n latest_sha: latest.sha,\n local_sha: localHead,\n });\n }\n } else {\n // Ephemeral version \u2014 download from API\n output.progress('Remote has unpublished changes from the web editor');\n\n // Check for local uncommitted changes\n const { stdout: status } = await runGit(['status', '--porcelain'], { cwd });\n if (status.trim()) {\n output.error(\n 'Cannot download remote changes \u2014 you have uncommitted local changes',\n 'Commit or stash your changes first, then run guild agent pull again.'\n );\n process.exit(1);\n }\n\n const files = await client.get<Array<{ path: string; content: string }>>(\n `/agents/${guildConfig.agent_id}/code?include_unpublished=1`\n );\n\n for (const file of files) {\n const filePath = path.join(cwd, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n\n output.progress(\n `\u2713 Downloaded ${files.length} files from latest draft version`\n );\n if (isMachineReadable()) {\n output.data({\n success: true,\n message: `Downloaded ${files.length} files from draft version`,\n files_updated: files.length,\n });\n }\n }\n } else {\n // No versions exist yet \u2014 just report git pull result\n if (!gitPulledNewCommits) {\n output.progress('\u2713 Already up to date');\n }\n if (isMachineReadable()) {\n output.data({\n success: true,\n message: gitPulledNewCommits\n ? 'Pulled remote changes'\n : 'Already up to date',\n });\n }\n }\n } catch (error: unknown) {\n if (error instanceof GitError) {\n output.error('Git operation failed', formatGitError(error));\n process.exit(1);\n }\n\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n 'Agent not found',\n 'The agent may have been deleted.\\nCheck your guild.json agent_id.'\n );\n process.exit(1);\n }\n\n output.error(`Failed to pull: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport function createAgentCodeCommand(): Command {\n const cmd = new Command('code');\n\n cmd\n .description('Fetch the latest code for an agent')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .option('--draft', 'Include draft versions (default: only published)', false)\n .option('--output <directory>', 'Write files to directory instead of printing JSON')\n .action(\n async (\n agentIdArg: string | undefined,\n options: { draft: boolean; output?: string }\n ) => {\n const output = createOutputWriter();\n\n // Get agent ID from argument or guild.json\n const { agentId } = await getAgentId(agentIdArg);\n\n const client = new GuildAPIClient();\n\n const includeDraft = options.draft ? '1' : '0';\n\n let files: Array<{ path: string; content: string }>;\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n files = await client.get<Array<{ path: string; content: string }>>(\n `/agents/${resolvedId}/code?include_unpublished=${includeDraft}`\n );\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not logged in.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Agent not found: ${agentId}`,\n 'Check the agent ID:\\n guild agent list'\n );\n } else {\n output.error(`Failed to fetch agent code: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n\n if (files.length === 0) {\n if (options.draft) {\n output.error(\n 'No code found for this agent.',\n 'This agent has no versions saved yet.\\n\\nTo save code: cd <agent-directory> && guild agent save --message \"...\"'\n );\n } else {\n output.error(\n 'No code found for this agent.',\n 'This agent has no published versions.\\n\\nTo see draft versions: guild agent code <agent-id> --draft\\nTo publish a version: cd <agent-directory> && guild agent save --message \"...\" --publish'\n );\n }\n process.exit(1);\n }\n\n // If output directory specified, write files\n if (options.output) {\n try {\n await fs.mkdir(options.output, { recursive: true });\n\n for (const file of files) {\n const filePath = path.join(options.output, file.path);\n const fileDir = path.dirname(filePath);\n\n // Create subdirectories if needed\n await fs.mkdir(fileDir, { recursive: true });\n\n // Write file\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n\n output.data({\n success: 'Code written to directory',\n directory: options.output,\n files_written: files.length,\n files: files.map((f) => f.path),\n });\n process.exit(0);\n } catch (error: unknown) {\n const err = error as { message?: string };\n output.error(\n `Could not write files to directory: ${options.output}`,\n `Error: ${err.message || 'Unknown error'}\\n\\nCheck that:\\n \u2022 Directory is writable\\n \u2022 You have permission to create files\\n \u2022 Disk space is available`\n );\n process.exit(1);\n }\n } else {\n // Just print JSON\n output.data({ files });\n process.exit(0);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createSteps, createSpinner, format } from '../../lib/progress.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as readline from 'readline';\nimport type { GuildConfig, CreateAgentResponse } from '../../lib/api-types.js';\nimport { getAuthenticatedUrl } from '../../lib/auth.js';\nimport { runGit, GitError, formatGitError, installPrePushHook } from '../../lib/git.js';\nimport { resolveOwnerId } from '../../lib/owner-helpers.js';\nimport { isInteractive } from '../../lib/stdin.js';\n\ntype AgentTemplate = 'LLM' | 'AUTO_MANAGED_STATE' | 'BLANK';\n\nconst TEMPLATE_CHOICES = [\n {\n name: 'LLM - Simple language model agent (recommended)',\n value: 'LLM' as AgentTemplate,\n short: 'LLM',\n },\n {\n name: 'Auto-managed state - Agent with automatic state management',\n value: 'AUTO_MANAGED_STATE' as AgentTemplate,\n short: 'Auto-managed state',\n },\n {\n name: 'Blank - Start from scratch',\n value: 'BLANK' as AgentTemplate,\n short: 'Blank',\n },\n];\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nconst NAME_RULES =\n 'Lowercase letters, digits, hyphens, and underscores only (1-100 characters)';\n\nfunction isValidAgentName(name: string): boolean {\n return name.length >= 1 && name.length <= 100 && /^[a-z0-9\\-_.]+$/.test(name);\n}\n\nasync function promptForName(defaultName: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const ask = (): Promise<string> =>\n new Promise((resolve) => {\n rl.question(`Agent name [${defaultName}]: `, (answer) => {\n const trimmed = answer.trim();\n const name = trimmed || defaultName;\n if (!isValidAgentName(name)) {\n console.error(`Invalid name \"${name}\": ${NAME_RULES}`);\n resolve(ask());\n } else {\n rl.close();\n resolve(name);\n }\n });\n });\n\n return ask();\n}\n\nasync function confirmCreation(ownerName: string, agentName: string): Promise<boolean> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(\n `\\nYou are about to create agent \"${ownerName}~${agentName}\".\\n` +\n 'Warning: Owner and name cannot be changed after creation, and agents cannot be deleted.\\n\\n' +\n 'Continue? [y/N] ',\n (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n }\n );\n });\n}\n\nasync function promptForTemplate(): Promise<AgentTemplate> {\n const { default: inquirer } = await import('inquirer');\n const { template } = await inquirer.prompt([\n {\n type: 'list',\n name: 'template',\n message: 'Select agent template:',\n choices: TEMPLATE_CHOICES,\n default: 'LLM',\n },\n ]);\n return template;\n}\n\nexport function createAgentInitCommand(): Command {\n const cmd = new Command('init');\n\n cmd\n .description('Initialize a directory as a Guild agent')\n .option('--name <name>', 'Agent name')\n .option('--template <template>', 'Agent template (LLM, AUTO_MANAGED_STATE, BLANK)')\n .option('--fork <agent-id>', 'Fork from existing agent')\n .option('--owner <owner>', 'Owner (name or ID)')\n .option(\n '--directory <path>',\n 'Directory to initialize (default: ./<name>, created if needed)'\n )\n .option('--force', 'Overwrite existing guild.json', false)\n .action(\n async (options: {\n name?: string;\n template?: AgentTemplate;\n fork?: string;\n owner?: string;\n directory?: string;\n force: boolean;\n }) => {\n // Get agent name first (needed to determine default directory)\n let agentName = options.name;\n if (!agentName) {\n if (isInteractive()) {\n const dirName = path.basename(process.cwd());\n const defaultName = slugify(dirName);\n agentName = await promptForName(defaultName);\n if (!agentName) {\n console.error('Error: Agent name cannot be empty');\n process.exit(1);\n }\n } else {\n console.error('Error: Agent name is required');\n console.error('');\n console.error('Provide a name:');\n console.error(' guild agent init --name my-agent');\n console.error('');\n console.error('Or run interactively to be prompted for a name.');\n process.exit(1);\n }\n }\n\n // Resolve target directory: --directory overrides, otherwise ./<name>\n const targetDir = options.directory\n ? path.resolve(process.cwd(), options.directory)\n : path.resolve(process.cwd(), agentName);\n\n // Create directory if it doesn't exist\n await fs.mkdir(targetDir, { recursive: true });\n\n const guildJsonPath = path.join(targetDir, 'guild.json');\n\n try {\n // Check if already initialized\n const guildJsonExists = await fs\n .access(guildJsonPath)\n .then(() => true)\n .catch(() => false);\n\n if (guildJsonExists && !options.force) {\n const existingConfig = JSON.parse(\n await fs.readFile(guildJsonPath, 'utf-8')\n );\n console.error('Error: Directory already initialized as Guild agent');\n console.error('');\n console.error(\n `guild.json already exists with agent_id: ${existingConfig.agent_id}`\n );\n console.error('');\n console.error('To reinitialize, use: guild agent init --force');\n process.exit(1);\n }\n\n // Validate name (catches --name flag and non-interactive paths)\n if (!isValidAgentName(agentName)) {\n console.error(`Error: Invalid agent name \"${agentName}\"`);\n console.error('');\n console.error(`Agent names must use ${NAME_RULES}`);\n console.error('');\n console.error('Examples: my-agent, my_agent');\n process.exit(1);\n }\n\n // Determine template: use --template option, prompt if interactive, or error\n let template = options.template;\n if (!template) {\n if (isInteractive()) {\n template = await promptForTemplate();\n } else {\n console.error('Error: --template is required in non-interactive mode');\n console.error('');\n console.error('Provide a template:');\n console.error(' guild agent init --name my-agent --template LLM');\n console.error('');\n console.error('Available templates:');\n console.error(' \u2022 LLM - Simple language model agent (recommended)');\n console.error(\n ' \u2022 AUTO_MANAGED_STATE - Agent with automatic state management'\n );\n console.error(' \u2022 BLANK - Start from scratch');\n process.exit(1);\n }\n }\n\n // Normalize template to uppercase for case-insensitive matching\n template = template.toUpperCase() as AgentTemplate;\n\n // Validate template\n const validTemplates: AgentTemplate[] = [\n 'LLM',\n 'AUTO_MANAGED_STATE',\n 'BLANK',\n ];\n if (!validTemplates.includes(template)) {\n console.error(`Error: Invalid template '${template}'`);\n console.error('');\n console.error('Valid templates:');\n console.error(' \u2022 LLM');\n console.error(' \u2022 AUTO_MANAGED_STATE');\n console.error(' \u2022 BLANK');\n process.exit(1);\n }\n\n // Create progress tracker for initialization steps\n const stepNames = [\n 'Create agent in backend',\n 'Initialize git repository',\n 'Configure git remote',\n 'Wait for backend initialization',\n 'Pull scaffolding from remote',\n 'Create guild.json',\n ];\n const steps = createSteps(stepNames);\n\n steps.start();\n\n // Step 1: Create agent in backend\n const client = new GuildAPIClient();\n\n // Resolve owner\n const owner = await resolveOwnerId({\n ownerFlag: options.owner,\n client,\n interactive: isInteractive(),\n requireExplicitOwner: true,\n });\n\n if (isInteractive()) {\n const confirmed = await confirmCreation(owner.name, agentName);\n if (!confirmed) {\n console.log('Cancelled.');\n process.exit(0);\n }\n }\n\n const agent = await client.post<CreateAgentResponse>('/agents', {\n name: agentName,\n description: `Agent created via CLI`,\n is_public: false,\n template,\n owner_id: owner.id,\n });\n\n steps.succeed('Create agent in backend');\n format.detail(`Agent: ${agent.name} (${agent.id})`);\n format.detail(`Owner: ${owner.name}`);\n\n // Step 2: Initialize git repository if needed\n const gitDir = path.join(targetDir, '.git');\n const gitExists = await fs\n .access(gitDir)\n .then(() => true)\n .catch(() => false);\n\n if (!gitExists) {\n await runGit(['init', '-b', 'main'], { cwd: targetDir });\n steps.succeed('Initialize git repository');\n } else {\n steps.succeed('Initialize git repository');\n format.detail('Already initialized');\n }\n\n // Step 3: Configure git remote\n try {\n // Check if remote 'origin' exists\n await runGit(['remote', 'get-url', 'origin'], { cwd: targetDir });\n // Remote exists, update it\n await runGit(['remote', 'set-url', 'origin', agent.git_url], {\n cwd: targetDir,\n });\n } catch {\n // Remote doesn't exist, add it\n await runGit(['remote', 'add', 'origin', agent.git_url], {\n cwd: targetDir,\n });\n }\n steps.succeed('Configure git remote');\n format.detail(`Remote: ${agent.git_url}`);\n\n // Step 2: Wait for backend to complete initialization\n // Backend pushes scaffolding files in a background task and sets status to READY\n const spinner = createSpinner('Waiting for backend initialization...');\n spinner.start();\n\n const maxAttempts = 60; // 60 seconds max wait for backend initialization\n const delayMs = 1000;\n let agentReady = false;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n\n try {\n // Poll agent status\n const updatedAgent = await client.get<CreateAgentResponse>(\n `/agents/${agent.id}`\n );\n\n if (updatedAgent.status === 'READY') {\n agentReady = true;\n spinner.succeed('Backend initialization complete');\n steps.succeed('Wait for backend initialization');\n break;\n }\n\n // Update spinner with progress\n spinner.text = `Waiting for backend initialization... (${attempt}/${maxAttempts})`;\n } catch {\n // If we can't fetch the agent, continue polling\n if (attempt === maxAttempts) {\n spinner.warn('Could not verify initialization status');\n steps.warn('Wait for backend initialization', 'Status unknown');\n }\n }\n }\n\n if (!agentReady) {\n spinner.fail('Backend initialization timed out');\n steps.fail('Wait for backend initialization');\n console.error('');\n console.error(\n 'The backend is taking longer than expected to initialize the agent.'\n );\n console.error(\n 'This usually means the GitHub repository creation is delayed.'\n );\n console.error('');\n console.error('You can check the status later with:');\n console.error(` guild agent get ${agent.id}`);\n console.error('');\n console.error('Or wait and try pulling the scaffolding manually:');\n console.error(` cd ${targetDir}`);\n console.error(' git pull origin main');\n process.exit(1);\n }\n\n // Step 5: Pull scaffolding from remote\n // Retry pull with short delays since GitHub may need a moment after API push\n const pullMaxAttempts = 15;\n const pullDelayMs = 1000; // 1 second between attempts\n\n // Get authenticated URL for git pull\n const authenticatedGitUrl = await getAuthenticatedUrl(agent.git_url);\n if (!authenticatedGitUrl) {\n console.error('Error: Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n for (let attempt = 1; attempt <= pullMaxAttempts; attempt++) {\n try {\n await runGit(['pull', authenticatedGitUrl, 'main'], { cwd: targetDir });\n steps.succeed('Pull scaffolding from remote');\n break;\n } catch (error) {\n if (attempt < pullMaxAttempts) {\n // Short, consistent delay between retries (total max wait: 15s)\n await new Promise((resolve) => setTimeout(resolve, pullDelayMs));\n } else {\n // Final attempt failed - log error for debugging\n const errMsg =\n error instanceof GitError\n ? error.stderr || error.stdout\n : error instanceof Error\n ? error.message\n : String(error);\n steps.warn(\n 'Pull scaffolding from remote',\n 'Could not pull from remote'\n );\n format.detail(`Git pull error: ${errMsg}`);\n format.detail('Backend may still be initializing the repository');\n }\n }\n }\n\n // Step 6: Create guild.json\n const guildConfig: GuildConfig = {\n agent_id: agent.id,\n name: agentName,\n };\n await fs.writeFile(\n guildJsonPath,\n JSON.stringify(guildConfig, null, 2) + '\\n',\n 'utf-8'\n );\n steps.succeed('Create guild.json');\n\n // Add guild.json and .guild/cache/ to .gitignore if not already present\n const gitignorePath = path.join(targetDir, '.gitignore');\n try {\n const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');\n const existingLines = gitignoreContent.split('\\n').map((l) => l.trim());\n const lines: string[] = [];\n if (!existingLines.includes('guild.json')) {\n lines.push('guild.json');\n }\n if (!existingLines.includes('.guild/cache/')) {\n lines.push('.guild/cache/');\n }\n if (lines.length > 0) {\n const prefix = gitignoreContent.endsWith('\\n') ? '' : '\\n';\n await fs.appendFile(gitignorePath, prefix + lines.join('\\n') + '\\n');\n }\n } catch {\n // .gitignore doesn't exist (backend should have created it), create it\n await fs.writeFile(gitignorePath, 'guild.json\\n.guild/cache/\\n');\n }\n\n // Install pre-push hook to block direct git push\n await installPrePushHook(targetDir);\n\n // Complete progress tracking\n steps.complete('Agent initialized successfully');\n\n // Display next steps\n format.section('Next steps:');\n format.detail(`1. cd ${targetDir}`);\n format.detail('2. Edit agent.ts to implement your agent logic');\n format.detail('3. git add . && git commit -m \"Initial implementation\"');\n format.detail(\"4. Run 'guild agent save' to push and create a version\");\n format.detail(`5. Run 'guild agent test' to test your agent`);\n format.detail('');\n format.detail(\n `Tip: Using a coding agent? Run 'guild setup' to install skills for Claude Code, Codex, etc.`\n );\n } catch (error: unknown) {\n if (error instanceof GitError) {\n console.error('Error: Git operation failed');\n console.error('');\n console.error(formatGitError(error));\n process.exit(1);\n }\n\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n console.error('Not authenticated. Please log in first.');\n console.error('');\n console.error('Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n console.error('Cannot connect to Guild servers.');\n console.error('');\n console.error('Please check your connection and try again.');\n process.exit(1);\n }\n\n console.error(`Failed to initialize agent: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport type { AgentListResponse } from '../../lib/api-types.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { loadLocalConfig } from '../../lib/guild-config.js';\n\nexport function createAgentGrepCommand(): Command {\n const cmd = new Command('grep');\n\n cmd\n .description('Search agent files for a matching pattern')\n .argument(\n '[pattern]',\n 'JavaScript regex for which to search: all lines matching this pattern will be printed'\n )\n .option('--all', 'Search all agents (default: current agent only)')\n .option('--published', 'Only search published agents (requires --all)')\n .action(grep);\n\n return cmd;\n}\n\nconst BATCH_SIZE = 20;\n\nasync function grep(\n patternArg: string | undefined,\n options: { all: boolean; published: boolean }\n): Promise<void> {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Please log in first.', 'Run: guild auth login');\n process.exit(1);\n }\n\n if (patternArg === undefined) {\n output.error('Please specify a pattern to match');\n process.exit(1);\n }\n\n let patternRE: RegExp;\n try {\n patternRE = new RegExp(patternArg);\n } catch {\n output.error(`Invalid regex pattern: ${patternArg}`);\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n if (options.all) {\n await grepAllAgents(client, patternRE, options.published, output);\n } else {\n await grepCurrentAgent(client, patternRE, output);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to search agents: ${formattedError.details}`);\n process.exit(1);\n }\n}\n\nfunction searchFiles(\n files: Array<{ path: string; content: string }>,\n patternRE: RegExp,\n prefix: string,\n output: ReturnType<typeof createOutputWriter>\n): void {\n for (const { path, content } of files) {\n content.split('\\n').forEach((line, lineNumber) => {\n if (patternRE.test(line)) {\n output.progress(`${prefix}${path}:${lineNumber + 1}:${line}`);\n }\n });\n }\n}\n\nasync function grepCurrentAgent(\n client: GuildAPIClient,\n patternRE: RegExp,\n output: ReturnType<typeof createOutputWriter>\n): Promise<void> {\n const config = await loadLocalConfig();\n\n if (!config?.agent_id) {\n output.error(\n 'Not in an agent directory.',\n 'Either run from an agent directory with guild.json:\\n cd <agent-directory>\\n guild agent grep <pattern>\\n\\nOr search all agents:\\n guild agent grep <pattern> --all'\n );\n process.exit(1);\n }\n\n let files: Array<{ path: string; content: string }> = [];\n try {\n files = await client.get<Array<{ path: string; content: string }>>(\n `/agents/${config.agent_id}/code`\n );\n } catch (ex: unknown) {\n const formattedError = handleAxiosError(ex);\n output.error(`Failed to fetch agent code: ${formattedError.details}`);\n process.exit(1);\n }\n\n searchFiles(files, patternRE, '', output);\n}\n\nasync function grepAllAgents(\n client: GuildAPIClient,\n patternRE: RegExp,\n publishedOnly: boolean,\n output: ReturnType<typeof createOutputWriter>\n): Promise<void> {\n let offset = 0;\n while (true) {\n const params = new URLSearchParams();\n params.append('offset', `${offset}`);\n params.append('limit', `${BATCH_SIZE}`);\n if (publishedOnly) {\n params.append('published_only', 'true');\n }\n\n const response = await client.get<AgentListResponse>(\n `/agents?${params.toString()}`\n );\n\n await Promise.all(\n response.items.map(async (agent) => {\n let files: Array<{ path: string; content: string }> = [];\n try {\n files = await client.get<Array<{ path: string; content: string }>>(\n `/agents/${agent.id}/code`\n );\n } catch (ex: unknown) {\n const formattedError = handleAxiosError(ex);\n output.error(`${agent.owner?.name}~${agent.name}: ${formattedError.details}`);\n return;\n }\n\n searchFiles(files, patternRE, `${agent.owner?.name}~${agent.name}/`, output);\n })\n );\n offset += response.pagination.limit;\n\n if (!response.pagination.has_more) break;\n }\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { getAuthenticatedUrl } from '../../lib/auth.js';\nimport { runGit, GitError, formatGitError, installPrePushHook } from '../../lib/git.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { resolveAgentRef } from '../../lib/agent-helpers.js';\nimport type { Agent } from '../../lib/api-types.js';\nasync function isDirectoryEmpty(dirPath: string): Promise<boolean> {\n try {\n const files = await fs.readdir(dirPath);\n return files.length === 0;\n } catch {\n // Directory doesn't exist, that's fine\n return true;\n }\n}\n\nexport function createAgentCloneCommand(): Command {\n const cmd = new Command('clone');\n\n cmd\n .description('Clone an existing agent repository')\n .argument('<identifier>', 'Agent ID or full name to clone (e.g., owner~agent-name)')\n .option('--directory <path>', 'Target directory for clone')\n .option('--force', 'Clone even if directory is not empty', false)\n .action(\n async (agentId: string, options: { directory?: string; force: boolean }) => {\n const output = createOutputWriter();\n\n try {\n // Fetch agent details\n const client = new GuildAPIClient();\n const resolvedId = await resolveAgentRef(client, agentId);\n\n const agent = await client.get<Agent>(`/agents/${resolvedId}`);\n\n if (!agent.git_url) {\n output.error(\n 'Error: Agent does not have a git repository',\n 'This agent may not have been initialized with git.'\n );\n process.exit(1);\n }\n\n output.progress(`\u2713 Fetched agent '${agent.name}' (${agent.id})`);\n\n // Determine target directory (default to agent name, like git clone)\n const targetDir = options.directory || agent.name;\n\n // Check if directory exists and is not empty\n const dirExists = await fs\n .access(targetDir)\n .then(() => true)\n .catch(() => false);\n\n if (dirExists) {\n const isEmpty = await isDirectoryEmpty(targetDir);\n if (!isEmpty && !options.force) {\n output.error(\n `Error: Directory '${targetDir}' is not empty`,\n `To clone anyway, use: guild agent clone ${agentId} --force\\n\\nOr choose a different directory:\\n guild agent clone ${agentId} --directory ./path/to/dir`\n );\n process.exit(1);\n }\n }\n\n // Clone repository\n const cloneUrl = await getAuthenticatedUrl(agent.git_url);\n if (!cloneUrl) {\n output.error('Error: Not authenticated', 'Run: guild auth login');\n process.exit(1);\n }\n\n await runGit(['clone', cloneUrl, targetDir]);\n output.progress(`\u2713 Cloned repository to ${targetDir}`);\n\n await installPrePushHook(targetDir);\n output.progress('\u2713 Installed pre-push hook');\n\n // Create guild.json if it doesn't exist\n const guildJsonPath = path.join(targetDir, 'guild.json');\n const guildJsonExists = await fs\n .access(guildJsonPath)\n .then(() => true)\n .catch(() => false);\n\n if (guildJsonExists) {\n output.progress('\u2713 Verified guild.json');\n } else {\n // Create guild.json for local development\n const guildConfig = {\n agent_id: agent.id,\n name: agent.name,\n };\n await fs.writeFile(\n guildJsonPath,\n JSON.stringify(guildConfig, null, 2) + '\\n'\n );\n output.progress('\u2713 Created guild.json');\n }\n\n // Display next steps\n output.progress('');\n output.progress('Next steps:');\n output.progress(` 1. cd ${targetDir}`);\n output.progress(' 2. Make your changes to the code');\n output.progress(' 3. git add . && git commit -m \"your changes\"');\n output.progress(\" 4. Run 'guild agent save' to push and create a version\");\n output.progress(` 5. Run 'guild agent test' to test your changes`);\n output.progress('');\n output.progress(\n `Tip: Using a coding agent? Run 'guild setup' to install skills for Claude Code, Codex, etc.`\n );\n } catch (error: unknown) {\n if (error instanceof GitError) {\n output.error('Error: Failed to clone repository', formatGitError(error));\n process.exit(1);\n }\n\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Error: Agent not found: ${agentId}`,\n 'Check the agent ID:\\n guild agent list'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n process.exit(1);\n }\n\n output.error(`Failed to clone agent: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes, debug } from '../../lib/errors.js';\nimport * as fs from 'fs/promises';\nimport * as readline from 'readline';\nimport { runGit, GitError, formatGitError } from '../../lib/git.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type {\n Agent,\n AgentVersionDetail,\n VersionListResponse,\n} from '../../lib/api-types.js';\nimport { resolveOwnerId } from '../../lib/owner-helpers.js';\nimport { isInteractive } from '../../lib/stdin.js';\n\nasync function promptForName(): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question('Name for forked agent: ', (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptForDescription(defaultDescription: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`Description (default: \"${defaultDescription}\"): `, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultDescription);\n });\n });\n}\n\nasync function isDirectoryEmpty(dirPath: string): Promise<boolean> {\n try {\n const files = await fs.readdir(dirPath);\n return files.length === 0;\n } catch {\n // Directory doesn't exist, that's fine\n return true;\n }\n}\n\nexport function createAgentForkCommand(): Command {\n const cmd = new Command('fork');\n\n cmd\n .description('Fork an existing agent version to create a new agent')\n .argument(\n '[identifier]',\n 'Agent ID, full name, or agent:version (e.g., owner~agent-name:version_xyz)'\n )\n .option('--name <name>', 'Name for the forked agent')\n .option('--description <desc>', 'Description for the forked agent')\n .option('--directory <path>', 'Target directory for clone')\n .option('--owner <owner>', 'Owner (name or ID)')\n .action(\n async (\n identifierArg: string | undefined,\n options: {\n name?: string;\n description?: string;\n directory?: string;\n owner?: string;\n }\n ) => {\n const output = createOutputWriter();\n\n try {\n // Resolve agent ID and optional version ID\n let sourceAgentId: string;\n let sourceVersionId: string | undefined;\n\n if (identifierArg && identifierArg.includes(':')) {\n // Explicit agent:version format\n const colonIndex = identifierArg.lastIndexOf(':');\n const agentPart = identifierArg.substring(0, colonIndex);\n sourceVersionId = identifierArg.substring(colonIndex + 1);\n if (!agentPart || !sourceVersionId) {\n output.error(\n 'Error: Invalid argument format',\n 'Expected: [identifier] or [identifier]:[version-id]\\nExample: guild agent fork owner~agent-name:version_xyz\\n\\nTo find versions:\\n guild agent versions <agent-id>'\n );\n process.exit(1);\n }\n const resolved = await getAgentId(agentPart);\n sourceAgentId = resolved.agentId;\n } else {\n // No version specified \u2014 resolve agent, then find latest published\n const resolved = await getAgentId(identifierArg);\n sourceAgentId = resolved.agentId;\n }\n\n // Auto-resolve version if not specified\n const client = new GuildAPIClient();\n sourceAgentId = await resolveAgentRef(client, sourceAgentId);\n\n if (!sourceVersionId) {\n const versions = await client.get<VersionListResponse>(\n `/agents/${sourceAgentId}/versions`\n );\n const published = versions.items\n .filter((v) => v.status === 'PUBLISHED')\n .sort(\n (a, b) =>\n new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n if (published.length === 0) {\n output.error(\n 'No published versions found',\n `Agent ${sourceAgentId} has no published versions to fork.\\n\\nTo see all versions:\\n guild agent versions ${sourceAgentId}`\n );\n process.exit(1);\n }\n sourceVersionId = published[0].id;\n }\n\n // Determine name (validate before API call for better UX)\n let agentName = options.name;\n if (!agentName) {\n if (isInteractive()) {\n agentName = await promptForName();\n if (!agentName) {\n output.error('Error: Agent name is required');\n process.exit(1);\n }\n } else {\n output.error(\n 'Error: Agent name required in non-interactive mode',\n `Provide a name:\\n guild agent fork ${identifierArg || '<identifier>'} --name my-forked-agent\\n\\nOr run interactively to be prompted.`\n );\n process.exit(1);\n }\n }\n\n // Validate name format (before API call)\n if (!/^[a-z0-9_-]{5,100}$/.test(agentName)) {\n output.error(\n 'Error: Invalid agent name',\n 'Name must:\\n \u2022 Be between 5 and 100 characters\\n \u2022 Only contain lowercase letters, numbers, hyphens, and underscores\\n\\nExamples: my-agent, weather_bot, agent-007'\n );\n process.exit(1);\n }\n\n // Determine directory (default to agent name)\n const targetDir = options.directory || `./${agentName}`;\n\n // Check if directory exists and is empty (before API call)\n const dirExists = await fs\n .access(targetDir)\n .then(() => true)\n .catch(() => false);\n\n if (dirExists) {\n const isEmpty = await isDirectoryEmpty(targetDir);\n if (!isEmpty) {\n output.error(\n `Error: Directory '${targetDir}' already exists and is not empty`,\n `Choose a different directory:\\n guild agent fork ${identifierArg || '<identifier>'} --directory ./different-path\\n\\nOr remove the existing directory first.`\n );\n process.exit(1);\n }\n }\n\n // Fetch source version from API (after local validations)\n const sourceVersion = await client.get<AgentVersionDetail>(\n `/agents/${sourceAgentId}/versions/${sourceVersionId}`\n );\n\n output.progress(\n `\u2713 Fetched source version from '${sourceVersion.agent.name}' (${sourceVersionId.substring(0, 12)})`\n );\n\n // Determine description\n let description = options.description;\n if (!description) {\n if (isInteractive()) {\n description = await promptForDescription(sourceVersion.agent.description);\n } else {\n // Use source description in non-interactive mode\n description = sourceVersion.agent.description;\n }\n }\n\n // Resolve owner\n const owner = await resolveOwnerId({\n ownerFlag: options.owner,\n client,\n interactive: isInteractive(),\n requireExplicitOwner: true,\n });\n\n // Create forked agent\n output.progress(`\u2713 Forking agent '${agentName}'...`);\n\n const newAgent = await client.post<Agent>('/agents', {\n name: agentName,\n description,\n forked_from_version: sourceVersionId,\n owner_id: owner.id,\n });\n\n output.progress(`\u2713 Agent created: ${newAgent.name} (${newAgent.id})`);\n\n // Poll until repository is ready\n output.progress('\u2713 Waiting for repository initialization...');\n\n let attempts = 0;\n const maxAttempts = 60; // 2 minutes\n let agent: Agent = newAgent;\n\n while (\n agent.status !== 'READY' &&\n agent.status !== 'FAILED' &&\n attempts < maxAttempts\n ) {\n await new Promise((resolve) => setTimeout(resolve, 2000));\n agent = await client.get<Agent>(`/agents/${newAgent.id}`);\n attempts++;\n\n debug(`Agent status: ${agent.status} (attempt ${attempts}/${maxAttempts})`);\n }\n\n if (agent.status === 'FAILED') {\n output.error(\n 'Error: Repository initialization failed',\n `The agent was created but the repository could not be initialized.\\nCheck the agent status:\\n guild agent get ${newAgent.id}`\n );\n process.exit(1);\n }\n\n if (agent.status !== 'READY') {\n output.error(\n 'Error: Timed out waiting for repository initialization',\n `The agent was created but the repository is not ready yet.\\nCheck the status with:\\n guild agent get ${newAgent.id}\\n\\nOnce ready, clone manually:\\n guild agent clone ${newAgent.id} --directory ${targetDir}`\n );\n process.exit(1);\n }\n\n output.progress('\u2713 Repository ready!');\n\n if (!agent.git_url) {\n output.error(\n 'Error: Agent repository URL not available',\n `The agent was created but git_url is missing.\\nCheck the agent details:\\n guild agent get ${newAgent.id}`\n );\n process.exit(1);\n }\n\n // Clone the new repository\n await runGit(['clone', agent.git_url, targetDir]);\n output.progress(`\u2713 Cloned repository to ${targetDir}`);\n\n // Display next steps\n output.progress('');\n output.progress('Next steps:');\n output.progress(` 1. cd ${targetDir}`);\n output.progress(' 2. Make your changes to the code');\n output.progress(` 3. Run 'guild agent save --message \"your changes\"'`);\n output.progress(` 4. Run 'guild agent test' to test your changes`);\n output.progress('');\n output.progress(\n `Tip: Using a coding agent? Run 'guild setup' to install skills for Claude Code, Codex, etc.`\n );\n } catch (error: unknown) {\n if (error instanceof GitError) {\n output.error(\n 'Error: Failed to clone repository',\n `${formatGitError(error)}\\n\\nThe agent was created successfully, but cloning failed.\\nTry cloning manually:\\n guild agent clone <agent-id>`\n );\n process.exit(1);\n }\n\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Error: Agent or version not found: ${identifierArg || '<identifier>'}`,\n `Check available versions:\\n guild agent versions <agent-id>`\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n process.exit(1);\n }\n\n output.error(`Failed to fork agent: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { waitForValidation, waitForPublish } from '../../lib/version-helpers.js';\nimport type { VersionListResponse, AgentVersion } from '../../lib/api-types.js';\n\nexport function createAgentPublishCommand(): Command {\n const cmd = new Command('publish');\n\n cmd\n .description('Publish the latest draft version of an agent')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .option('--wait', 'Wait for validation to complete before publishing')\n .action(async (agentIdArg: string | undefined, options: { wait?: boolean }) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Resolve agent ID\n const { agentId, config } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n // Fetch all versions\n const response = await client.get<VersionListResponse>(\n `/agents/${resolvedId}/versions`\n );\n\n // Find latest DRAFT version\n const draftVersions = response.items\n .filter((v) => v.status === 'DRAFT')\n .sort(\n (a, b) =>\n new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n if (draftVersions.length === 0) {\n const agentName = config?.name || agentId;\n output.error(\n `No draft versions available for agent: ${agentName}`,\n 'Create a new version:\\n guild agent save --message \"your changes\"'\n );\n process.exit(1);\n }\n\n const versionToPublish = draftVersions[0];\n\n // Check if already published\n if (versionToPublish.status === 'PUBLISHED') {\n output.error(\n `Version ${versionToPublish.id} is already published`,\n 'To unpublish:\\n guild agent unpublish'\n );\n process.exit(1);\n }\n\n // Check validation status before attempting publish\n let currentVersion: AgentVersion = versionToPublish;\n const validationStatus = currentVersion.validation_status;\n\n if (validationStatus === 'PENDING' || validationStatus === 'RUNNING') {\n if (options.wait) {\n currentVersion = await waitForValidation(currentVersion.id, output);\n } else {\n output.error(\n 'Cannot publish: validation is still in progress',\n `Validation status: ${validationStatus === 'PENDING' ? 'Waiting to start' : 'Running'}\\n\\nOptions:\\n \u2022 Wait for validation: guild agent publish --wait\\n \u2022 Check status: guild agent versions`\n );\n process.exit(1);\n }\n } else if (validationStatus === 'FAILED') {\n output.error(\n 'Cannot publish: validation failed',\n 'Fix the issues, then save a new version:\\n guild agent save --message \"Fix validation errors\"'\n );\n process.exit(1);\n }\n\n // Publish version\n currentVersion = await client.post<AgentVersion>(\n `/versions/${currentVersion.id}/publish`,\n {}\n );\n\n if (options.wait && currentVersion.status !== 'PUBLISHED') {\n currentVersion = await waitForPublish(currentVersion.id, output);\n }\n\n const details: Record<string, unknown> = {\n agent: `${currentVersion.agent?.name || config?.name || agentId}${config ? '' : ` (${agentId})`}`,\n status:\n currentVersion.status === 'PUBLISHED'\n ? 'DRAFT \u2192 PUBLISHED'\n : 'DRAFT \u2192 PUBLISHING',\n };\n if (currentVersion.version_number) {\n details.version = currentVersion.version_number;\n }\n output.success(`Published version ${currentVersion.id}`, details);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found', 'Run: guild agent list');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n process.exit(1);\n }\n\n output.error(`Failed to publish: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { VersionListResponse } from '../../lib/api-types.js';\n\nexport function createAgentUnpublishCommand(): Command {\n const cmd = new Command('unpublish');\n\n cmd\n .description('Unpublish the latest published version of an agent')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .action(async (agentIdArg?: string) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Resolve agent ID\n const { agentId, config } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n // Fetch all versions\n const response = await client.get<VersionListResponse>(\n `/agents/${resolvedId}/versions`\n );\n\n // Find latest PUBLISHED version\n const publishedVersions = response.items\n .filter((v) => v.status === 'PUBLISHED')\n .sort(\n (a, b) =>\n new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n if (publishedVersions.length === 0) {\n const agentName = config?.name || agentId;\n output.error(\n `No published versions available for agent: ${agentName}`,\n 'Publish a draft version:\\n guild agent publish'\n );\n process.exit(1);\n }\n\n const versionToUnpublish = publishedVersions[0];\n\n // Check if already draft\n if (versionToUnpublish.status === 'DRAFT') {\n output.error(\n `Version ${versionToUnpublish.id} is already a draft`,\n 'To publish:\\n guild agent publish'\n );\n process.exit(1);\n }\n\n // Unpublish version\n await client.post(`/versions/${versionToUnpublish.id}/unpublish`, {});\n\n output.success(`Unpublished version ${versionToUnpublish.id}`, {\n agent: `${versionToUnpublish.agent?.name || config?.name || agentId}${config ? '' : ` (${agentId})`}`,\n status: 'PUBLISHED \u2192 DRAFT',\n });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found', 'Run: guild agent list');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n process.exit(1);\n }\n\n output.error(`Failed to unpublish version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getGuildcoreUrl } from '../../lib/config.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { AgentVersion, VersionListResponse } from '../../lib/api-types.js';\n\nexport function createAgentRevalidateCommand(): Command {\n const cmd = new Command('revalidate');\n\n cmd\n .description('Revalidate an agent version')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .argument(\n '[version-id]',\n 'ID of the version to revalidate (uses latest if omitted)'\n )\n .action(\n async (agentIdArg: string | undefined, versionIdArg: string | undefined) => {\n const output = createOutputWriter();\n\n // Get agent ID from argument or guild.json\n const { agentId } = await getAgentId(agentIdArg);\n\n const baseUrl = getGuildcoreUrl();\n const client = new GuildAPIClient({ baseUrl });\n\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n let versionId = versionIdArg;\n\n // If no version ID provided, get the latest version\n if (!versionId) {\n const versions = await client.get<VersionListResponse>(\n `/agents/${resolvedId}/versions?limit=1&offset=0`\n );\n\n if (!versions.items || versions.items.length === 0) {\n output.error(\n 'No versions found for this agent.',\n `The agent may still be initializing. Check status:\\n guild agent get ${agentId}`\n );\n process.exit(1);\n }\n\n versionId = versions.items[0].id;\n }\n\n // Revalidate the version\n const result = await client.post<AgentVersion>(\n `/agents/${resolvedId}/versions/${versionId}/revalidate`\n );\n\n output.data(result);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n 'Agent or version not found',\n `Check the agent and version IDs:\\n guild agent list\\n guild agent versions ${agentId}`\n );\n } else {\n output.error(`Failed to revalidate version: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getGuildcoreUrl } from '../../lib/config.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatValidationLogs } from '../../lib/output.js';\nimport type {\n VersionListResponse,\n ValidationStepsResponse,\n} from '../../lib/api-types.js';\n\nexport function createAgentLogsCommand(): Command {\n const cmd = new Command('logs');\n\n cmd\n .description('Show build/validation logs for an agent version')\n .argument('[identifier]', 'Agent ID or full name (e.g., \"owner~agent-name\")')\n .argument(\n '[version-id]',\n 'ID of the version to show logs for (uses latest if omitted)'\n )\n .action(\n async (agentIdArg: string | undefined, versionIdArg: string | undefined) => {\n const output = createOutputWriter();\n\n // Get agent ID from argument or guild.json\n const { agentId } = await getAgentId(agentIdArg);\n\n const baseUrl = getGuildcoreUrl();\n const client = new GuildAPIClient({ baseUrl });\n\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n let versionId = versionIdArg;\n\n // If no version ID provided, get the latest version\n if (!versionId) {\n const versions = await client.get<VersionListResponse>(\n `/agents/${resolvedId}/versions?limit=1&offset=0`\n );\n\n if (!versions.items || versions.items.length === 0) {\n output.error(\n 'No versions found for this agent.',\n `The agent may still be initializing. Check status:\\n guild agent get ${agentId}`\n );\n process.exit(1);\n }\n\n versionId = versions.items[0].id;\n }\n\n // Fetch validation steps for the version\n const stepsResponse = await client.get<ValidationStepsResponse>(\n `/versions/${versionId}/validation/steps`\n );\n\n if (isMachineReadable()) {\n output.data(stepsResponse);\n } else {\n formatValidationLogs(stepsResponse.steps);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n 'Agent or version not found',\n `Check the agent and version IDs:\\n guild agent list\\n guild agent versions ${agentId}`\n );\n } else {\n output.error(`Failed to retrieve logs: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatAgentTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { AgentListResponse } from '../../lib/api-types.js';\n\nconst SORT_MAP: Record<string, string> = {\n updated: 'updated_at',\n newest: 'created_at',\n name: 'name',\n popular: 'cached_likes_count',\n};\n\nexport function createAgentSearchCommand(): Command {\n const cmd = new Command('search');\n\n cmd\n .description('Search agents')\n .argument('<query>', 'Search query')\n .option(\n '--sort <field>',\n 'Sort by: updated, newest, name, popular (default: updated)',\n 'updated'\n )\n .option('--published', 'Only show published agents')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (\n query: string,\n options: {\n sort: string;\n published?: boolean;\n limit: string;\n offset: string;\n }\n ) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('search', query);\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n if (options.published) {\n params.append('published_only', 'true');\n }\n\n const sortField = SORT_MAP[options.sort];\n if (sortField) {\n params.append('sort_by', sortField);\n }\n\n const response = await client.get<AgentListResponse>(\n `/agents?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatAgentTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to search agents: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { loadGlobalConfig } from '../../lib/guild-config.js';\nimport type { MeResponse, Organization } from '../../lib/api-types.js';\n\nexport function createAgentOwnersCommand(): Command {\n const cmd = new Command('owners');\n\n cmd.description('List accounts that can own agents').action(async () => {\n const output = createOutputWriter();\n try {\n const mode = isMachineReadable();\n const client = new GuildAPIClient();\n\n const [me, orgs, globalConfig] = await Promise.all([\n client.get<MeResponse>('/me'),\n client.fetchAll<Organization>('/me/organizations'),\n loadGlobalConfig(),\n ]);\n\n const defaultOwnerId = globalConfig?.default_owner;\n\n interface OwnerEntry {\n id: string;\n name: string;\n type: 'user' | 'organization';\n is_default: boolean;\n }\n\n const owners: OwnerEntry[] = [\n {\n id: me.id,\n name: me.name,\n type: 'user',\n is_default: defaultOwnerId === me.id,\n },\n ...orgs.map((org) => ({\n id: org.id,\n name: org.name,\n type: 'organization' as const,\n is_default: defaultOwnerId === org.id,\n })),\n ];\n\n if (mode) {\n output.data({ owners });\n return;\n }\n\n // Table display\n console.log('');\n console.log(\n `${chalk.dim('TYPE')} ${chalk.dim('NAME')} ${chalk.dim('ID')}`\n );\n console.log(chalk.dim('\u2500'.repeat(72)));\n\n for (const owner of owners) {\n const typeLabel = owner.type === 'user' ? 'user' : 'org';\n const typePadded = typeLabel.padEnd(15);\n const defaultLabel = owner.is_default ? chalk.cyan(' (default)') : '';\n const namePadded = (owner.name + (owner.is_default ? '' : '')).padEnd(25);\n console.log(\n `${typePadded} ${namePadded}${defaultLabel ? defaultLabel + ' ' : ''}${chalk.dim(owner.id)}`\n );\n }\n\n console.log('');\n\n if (!defaultOwnerId) {\n console.log(\n chalk.dim('No default owner set. Run: guild config set default_owner <id>')\n );\n console.log('');\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n 'Cannot connect to Guild servers.',\n 'Please check your connection and try again.'\n );\n process.exit(1);\n }\n\n output.error(`Failed to list owners: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getGuildcoreUrl } from '../../lib/config.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { getAgentId, resolveAgentRef } from '../../lib/agent-helpers.js';\nimport { createOutputWriter, formatWorkspaceTable } from '../../lib/output.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { WorkspaceListResponse } from '../../lib/api-types.js';\n\nexport function createAgentWorkspacesCommand(): Command {\n const cmd = new Command('workspaces');\n\n cmd\n .description('List workspaces that use an agent')\n .argument('[identifier]', 'Agent ID or full name (e.g., owner~agent-name)')\n .option(\n '--limit <number>',\n `Maximum number of workspaces to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Number of workspaces to skip (default: 0)', '0')\n .action(\n async (\n agentIdArg: string | undefined,\n options: { limit: string; offset: string }\n ) => {\n const output = createOutputWriter();\n\n const { agentId } = await getAgentId(agentIdArg);\n\n const baseUrl = getGuildcoreUrl();\n const client = new GuildAPIClient({ baseUrl });\n\n const limit = parseInt(options.limit, 10);\n const offset = parseInt(options.offset, 10);\n\n try {\n const resolvedId = await resolveAgentRef(client, agentId);\n const result = await client.get<WorkspaceListResponse>(\n `/agents/${resolvedId}/workspaces?limit=${limit}&offset=${offset}`\n );\n\n if (isMachineReadable()) {\n output.data(result);\n } else {\n formatWorkspaceTable(result.items, result.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not logged in.',\n 'Please authenticate first:\\n guild auth login'\n );\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Agent not found: ${agentId}`,\n 'Check the agent ID:\\n guild agent list'\n );\n } else {\n output.error(`Failed to list workspaces: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { AgentTags } from '../../../lib/api-types.js';\n\nexport function createAgentTagsListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List tags for an agent')\n .argument('[agent-id]', 'Agent ID (optional if in agent directory)')\n .action(async (agentIdArg?: string) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Resolve agent ID\n const { agentId } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n // Fetch tags\n const response = await client.get<AgentTags>(`/agents/${resolvedId}/tags`);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated.', 'Run: guild auth login');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found.', 'Run: guild agent list');\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else {\n output.error(`Failed to fetch tags: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { AgentTags } from '../../../lib/api-types.js';\n\nexport function createAgentTagsAddCommand(): Command {\n const cmd = new Command('add');\n\n cmd\n .description('Add tags to an agent')\n .argument('[agent-id]', 'Agent ID (optional if in agent directory)')\n .argument('<tags...>', 'Tags to add')\n .action(async (agentIdOrFirstTag: string | undefined, remainingTags: string[]) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Parse arguments - need to determine if first arg is agent-id or tag\n let agentIdArg: string | undefined;\n let tagsToAdd: string[];\n\n // Try to resolve agent ID from first argument\n try {\n await getAgentId(agentIdOrFirstTag);\n // If successful, first arg was agent-id\n agentIdArg = agentIdOrFirstTag;\n tagsToAdd = remainingTags;\n } catch {\n // First arg is not agent-id, must be a tag\n // Try to get agent-id from guild.json\n await getAgentId(undefined);\n agentIdArg = undefined;\n tagsToAdd = [agentIdOrFirstTag as string, ...remainingTags];\n }\n\n // Now resolve agent ID properly\n const { agentId, config } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n if (tagsToAdd.length === 0) {\n output.error(\n 'At least one tag is required.',\n 'Usage: guild agent tags add [agent-id] <tag...>'\n );\n process.exit(1);\n }\n\n // Fetch current tags\n const response = await client.get<AgentTags>(`/agents/${resolvedId}/tags`);\n const currentTags = response.names;\n\n // Add new tags (deduplicate)\n const updatedTags = Array.from(new Set([...currentTags, ...tagsToAdd]));\n\n // Update tags\n await client.post(`/agents/${resolvedId}/tags`, { names: updatedTags });\n\n const agentName = config?.name || `agent ${agentId}`;\n const label = `${agentName}${config ? '' : ` (${agentId})`}`;\n\n output.success(`Updated tags for agent: ${label}`);\n output.data({ names: updatedTags });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated.', 'Run: guild auth login');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found.', 'Run: guild agent list');\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else {\n output.error(`Failed to add tags: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { AgentTags } from '../../../lib/api-types.js';\n\nexport function createAgentTagsRemoveCommand(): Command {\n const cmd = new Command('remove');\n\n cmd\n .description('Remove tags from an agent')\n .argument('[agent-id]', 'Agent ID (optional if in agent directory)')\n .argument('<tags...>', 'Tags to remove')\n .action(async (agentIdOrFirstTag: string | undefined, remainingTags: string[]) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Parse arguments - need to determine if first arg is agent-id or tag\n let agentIdArg: string | undefined;\n let tagsToRemove: string[];\n\n // Try to resolve agent ID from first argument\n try {\n await getAgentId(agentIdOrFirstTag);\n // If successful, first arg was agent-id\n agentIdArg = agentIdOrFirstTag;\n tagsToRemove = remainingTags;\n } catch {\n // First arg is not agent-id, must be a tag\n // Try to get agent-id from guild.json\n await getAgentId(undefined);\n agentIdArg = undefined;\n tagsToRemove = [agentIdOrFirstTag as string, ...remainingTags];\n }\n\n // Now resolve agent ID properly\n const { agentId, config } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n if (tagsToRemove.length === 0) {\n output.error(\n 'At least one tag is required.',\n 'Usage: guild agent tags remove [agent-id] <tag...>'\n );\n process.exit(1);\n }\n\n // Fetch current tags\n const response = await client.get<AgentTags>(`/agents/${resolvedId}/tags`);\n const currentTags = response.names;\n\n // Remove specified tags\n const updatedTags = currentTags.filter((tag) => !tagsToRemove.includes(tag));\n\n // Track which tags were not present\n const notPresentTags = tagsToRemove.filter((tag) => !currentTags.includes(tag));\n\n // Update tags\n await client.post(`/agents/${resolvedId}/tags`, { names: updatedTags });\n\n const agentName = config?.name || `agent ${agentId}`;\n const label = `${agentName}${config ? '' : ` (${agentId})`}`;\n\n output.success(`Updated tags for agent: ${label}`);\n output.data({ names: updatedTags });\n\n // Show warning for tags that weren't present\n if (notPresentTags.length > 0) {\n if (notPresentTags.length === 1) {\n output.progress(`Note: Tag '${notPresentTags[0]}' was not present`);\n } else {\n output.progress(\n `Note: Tags not present: ${notPresentTags.map((t) => `'${t}'`).join(', ')}`\n );\n }\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated.', 'Run: guild auth login');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found.', 'Run: guild agent list');\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else {\n output.error(`Failed to remove tags: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAgentId, resolveAgentRef } from '../../../lib/agent-helpers.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\n\nexport function createAgentTagsSetCommand(): Command {\n const cmd = new Command('set');\n\n cmd\n .description('Set tags for an agent (replaces all existing tags)')\n .argument('[agent-id]', 'Agent ID (optional if in agent directory)')\n .argument('[tags...]', 'Tags to set (omit to clear all tags)')\n .action(async (agentIdOrFirstTag: string | undefined, remainingTags: string[]) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n // Parse arguments - need to determine if first arg is agent-id or tag\n let agentIdArg: string | undefined;\n let tagsToSet: string[];\n\n // Try to resolve agent ID from first argument\n try {\n await getAgentId(agentIdOrFirstTag);\n // If successful, first arg was agent-id\n agentIdArg = agentIdOrFirstTag;\n tagsToSet = remainingTags;\n } catch {\n // First arg is not agent-id, must be a tag (or undefined for clearing)\n // Try to get agent-id from guild.json\n await getAgentId(undefined);\n agentIdArg = undefined;\n tagsToSet = agentIdOrFirstTag\n ? [agentIdOrFirstTag as string, ...remainingTags]\n : [];\n }\n\n // Now resolve agent ID properly\n const { agentId, config } = await getAgentId(agentIdArg);\n const resolvedId = await resolveAgentRef(client, agentId);\n\n // Update tags (direct replacement)\n await client.post(`/agents/${resolvedId}/tags`, { names: tagsToSet });\n\n const agentName = config?.name || `agent ${agentId}`;\n const label = `${agentName}${config ? '' : ` (${agentId})`}`;\n\n if (tagsToSet.length === 0) {\n output.success(`Cleared all tags for agent: ${label}`);\n } else {\n output.success(`Updated tags for agent: ${label}`);\n }\n\n output.data({ names: tagsToSet });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated.', 'Run: guild auth login');\n } else if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Agent not found.', 'Run: guild agent list');\n } else if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error('Cannot connect to Guild servers');\n } else {\n output.error(`Failed to set tags: ${formattedError.details}`);\n }\n\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatWorkspaceTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { Workspace, WorkspaceListResponse } from '../../lib/api-types.js';\n\nexport function createWorkspaceListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List workspaces')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .option('--owner <name>', 'Filter workspaces by owner name (case-insensitive)')\n .action(async (options: { limit: string; offset: string; owner?: string }) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n let response: WorkspaceListResponse;\n\n if (options.owner) {\n // When filtering by owner, fetch ALL workspaces first so the\n // client-side filter is applied to the complete dataset, not just\n // one page. The backend's `filter` param only recognises \"all\" vs\n // personal; owner-name filtering is not supported server-side.\n const allWorkspaces = await client.fetchAll<Workspace>(\n '/me/workspaces?filter=all'\n );\n const ownerLower = options.owner.toLowerCase();\n const filtered = allWorkspaces.filter(\n (w) => w.owner?.name?.toLowerCase() === ownerLower\n );\n response = {\n items: filtered,\n pagination: {\n total_count: filtered.length,\n limit: filtered.length,\n offset: 0,\n has_more: false,\n },\n };\n } else {\n const params = new URLSearchParams();\n // Use filter=all to get workspaces from all orgs the user is a member of.\n params.append('filter', 'all');\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n response = await client.get<WorkspaceListResponse>(\n `/me/workspaces?${params.toString()}`\n );\n }\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatWorkspaceTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to list workspaces: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to list workspaces: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { resolveOwnerId } from '../../lib/owner-helpers.js';\nimport { isInteractive } from '../../lib/stdin.js';\nimport type { Workspace } from '../../lib/api-types.js';\n\nexport function createWorkspaceCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new workspace')\n .argument('<name>', 'Workspace name')\n .option('--owner <owner>', 'Owner (name or ID)')\n .action(async (name: string, options: { owner?: string }) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n\n const owner = await resolveOwnerId({\n ownerFlag: options.owner,\n client,\n interactive: isInteractive(),\n });\n\n // Create workspace\n const workspace = await client.post<Workspace>('/workspaces', {\n name,\n owner_id: owner.id,\n });\n\n output.data(workspace);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to create workspace: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.BAD_REQUEST) {\n output.error(\n `Failed to create workspace: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to create workspace: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Workspace } from '../../lib/api-types.js';\n\nexport function createWorkspaceGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get workspace details')\n .argument('<identifier>', 'Workspace ID or full name (e.g., owner~workspace-name)')\n .action(async (id: string) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n const workspace = await client.get<Workspace>(`/workspaces/${id}`);\n\n output.data(workspace);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to get workspace: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(`Workspace not found: ${id}`, 'Run: guild workspace list');\n process.exit(1);\n }\n\n output.error(`Failed to get workspace: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport * as fs from 'fs/promises';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { isInteractive } from '../../lib/stdin.js';\nimport {\n isAgentDirectory,\n loadLocalConfig,\n getLocalConfigPath,\n getWorkspaceId,\n saveGlobalConfig,\n} from '../../lib/guild-config.js';\nimport type { Workspace, WorkspaceListResponse } from '../../lib/api-types.js';\n\n/**\n * Format workspace for display with owner name.\n * Shows: \"workspace-name (id) [owner-name]\" for all workspaces with owner info\n * Shows: \"workspace-name (id)\" only if owner info is missing\n */\nfunction formatWorkspaceDisplay(workspace: Workspace): string {\n const base = `${workspace.name} (${workspace.id})`;\n if (workspace.owner) {\n return `${base} [${workspace.owner.name}]`;\n }\n return base;\n}\n\n/**\n * Match a workspace against a search argument (case-insensitive name, full_name, or exact ID).\n */\nfunction matchesWorkspaceArg(w: Workspace, arg: string): boolean {\n return (\n w.name === arg ||\n w.name.toLowerCase() === arg.toLowerCase() ||\n w.full_name === arg ||\n w.full_name?.toLowerCase() === arg.toLowerCase() ||\n w.id === arg\n );\n}\n\nexport function createWorkspaceSelectCommand(): Command {\n const cmd = new Command('select');\n\n cmd\n .description('Select default workspace for agent testing')\n .argument('[workspace]', 'Workspace name or ID to select directly')\n .option('--owner <name>', 'Filter workspaces by owner name (case-insensitive)')\n .action(async (workspaceArg?: string, options: { owner?: string } = {}) => {\n const output = createOutputWriter();\n const ownerFilter = options.owner;\n try {\n const client = new GuildAPIClient();\n\n // If a workspace argument was provided, use server-side search to find it\n if (workspaceArg) {\n // Use search param to narrow results server-side, then exact-match client-side.\n // The backend searches only the \"name\" column via ILIKE, so full_name (owner/name)\n // and ID lookups may not return results. Extract just the name part for search,\n // and if still no match, fall back to fetching the full list.\n // Always use filter=all \u2014 the backend's `filter` param only recognises \"all\"\n // vs personal; owner-name filtering is applied client-side below.\n const searchTerm = workspaceArg.includes('/')\n ? (workspaceArg.split('/').pop() ?? workspaceArg)\n : workspaceArg;\n const searchResults = await client.get<WorkspaceListResponse>(\n `/me/workspaces?filter=all&search=${encodeURIComponent(searchTerm)}&limit=100`\n );\n\n let candidates = searchResults.items;\n // Apply client-side owner filter on search results\n if (ownerFilter) {\n candidates = candidates.filter(\n (w) => w.owner?.name?.toLowerCase() === ownerFilter.toLowerCase()\n );\n }\n\n // Search didn't find it (could be an ID lookup, or search term didn't match).\n // Fall back to fetching all workspaces via pagination.\n const directMatch = candidates.find((w) =>\n matchesWorkspaceArg(w, workspaceArg)\n );\n if (!directMatch) {\n const allWorkspaces = await client.fetchAll<Workspace>(\n '/me/workspaces?filter=all'\n );\n candidates = ownerFilter\n ? allWorkspaces.filter(\n (w) => w.owner?.name?.toLowerCase() === ownerFilter.toLowerCase()\n )\n : allWorkspaces;\n }\n\n const workspace = candidates.find((w) =>\n matchesWorkspaceArg(w, workspaceArg)\n );\n\n if (!workspace) {\n if (ownerFilter) {\n output.error(\n `Workspace \"${workspaceArg}\" not found for owner \"${ownerFilter}\".`,\n 'Run: guild workspace list'\n );\n } else {\n output.error(\n `Workspace \"${workspaceArg}\" not found.`,\n 'Run: guild workspace list'\n );\n }\n process.exit(1);\n }\n\n const target = await saveWorkspaceConfig(workspace.id, workspace.name);\n if (target === 'local') {\n output.success(\n `Workspace set for this agent: ${formatWorkspaceDisplay(workspace)}`\n );\n } else {\n output.success(\n `Default workspace set to: ${formatWorkspaceDisplay(workspace)}`\n );\n output.progress('To clear the default, run: guild workspace clear');\n }\n return;\n }\n\n if (!isInteractive()) {\n output.error(\n 'Interactive mode requires a terminal.',\n 'Provide a workspace argument:\\n guild workspace select <name|id>'\n );\n process.exit(1);\n }\n\n // Interactive mode: fetch all workspaces across all pages.\n // Always use filter=all; owner-name filtering is applied client-side\n // (the backend's `filter` param only recognises \"all\" vs personal).\n let workspaces = await client.fetchAll<Workspace>('/me/workspaces?filter=all');\n if (ownerFilter) {\n workspaces = workspaces.filter(\n (w) => w.owner?.name?.toLowerCase() === ownerFilter.toLowerCase()\n );\n }\n\n if (workspaces.length === 0) {\n if (ownerFilter) {\n output.error(\n `No workspaces found for owner \"${ownerFilter}\".`,\n 'Run: guild workspace list'\n );\n } else {\n output.error(\n 'No workspaces found.',\n 'Create a workspace first:\\n guild workspace create <name>'\n );\n }\n process.exit(1);\n }\n\n // Resolve the currently selected workspace (if any)\n const current = await getWorkspaceId();\n const currentId = current?.workspaceId;\n\n // Interactive searchable selection\n const { default: search } = await import('@inquirer/search');\n const selectedId = await search<string>({\n message: 'Select a workspace (type to filter)',\n pageSize: 15,\n source: (input) => {\n const term = input?.toLowerCase() ?? '';\n const filtered = term\n ? workspaces.filter(\n (w) =>\n w.name.toLowerCase().includes(term) ||\n w.full_name?.toLowerCase().includes(term) ||\n w.owner?.name.toLowerCase().includes(term)\n )\n : workspaces;\n return filtered.map((w) => ({\n name:\n formatWorkspaceDisplay(w) + (w.id === currentId ? ' (current)' : ''),\n value: w.id,\n short: w.name,\n }));\n },\n });\n\n const selectedWorkspace = workspaces.find((w) => w.id === selectedId);\n if (!selectedWorkspace) {\n output.error('Selected workspace not found');\n process.exit(1);\n }\n const target = await saveWorkspaceConfig(\n selectedWorkspace.id,\n selectedWorkspace.name\n );\n if (target === 'local') {\n output.success(\n `Workspace set for this agent: ${formatWorkspaceDisplay(selectedWorkspace)}`\n );\n } else {\n output.success(\n `Default workspace set to: ${formatWorkspaceDisplay(selectedWorkspace)}`\n );\n output.progress('To clear the default, run: guild workspace clear');\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to fetch workspaces: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to select workspace: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n\n/**\n * Save workspace config to the appropriate location.\n *\n * - In agent directory (has guild.json): writes workspace_id to guild.json\n * - Not in agent directory: writes default_workspace to ~/.guild/config.json\n *\n * @returns 'local' if written to guild.json, 'global' if written to global config\n */\nasync function saveWorkspaceConfig(\n workspaceId: string,\n workspaceName: string\n): Promise<'local' | 'global'> {\n if (await isAgentDirectory()) {\n // In agent directory: write workspace_id to guild.json\n const localConfig = (await loadLocalConfig()) || { agent_id: '', name: '' };\n const updated = { ...localConfig, workspace_id: workspaceId };\n await fs.writeFile(getLocalConfigPath(), JSON.stringify(updated, null, 2) + '\\n');\n return 'local';\n }\n\n // Not in agent directory: write to global config\n await saveGlobalConfig({\n default_workspace: workspaceId,\n default_workspace_name: workspaceName,\n });\n return 'global';\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { getWorkspaceId, loadGlobalConfig } from '../../lib/guild-config.js';\n\ninterface Workspace {\n id: string;\n name: string;\n}\n\nexport function createWorkspaceCurrentCommand(): Command {\n const cmd = new Command('current');\n\n cmd.description('Show current default workspace').action(async () => {\n const output = createOutputWriter();\n try {\n // Get configured workspace ID\n const resolved = await getWorkspaceId();\n\n if (!resolved) {\n output.data({ configured: false, message: 'No default workspace configured.' });\n output.progress('Set a default workspace:\\n guild workspace select');\n return;\n }\n\n const { workspaceId, source } = resolved;\n\n // Fetch workspace details from API\n const client = new GuildAPIClient();\n const workspace = await client.get<Workspace>(`/workspaces/${workspaceId}`);\n\n output.data({\n name: workspace.name,\n id: workspaceId,\n source:\n source === 'local' ? 'guild.json (local)' : '~/.guild/config.json (global)',\n });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n // Still show configured workspace ID even if not authenticated\n const globalConfig = await loadGlobalConfig();\n if (globalConfig?.default_workspace) {\n output.data({\n id: globalConfig.default_workspace,\n source: '~/.guild/config.json (global)',\n authenticated: false,\n });\n output.progress('Log in to see workspace name:\\n guild auth login');\n return;\n }\n\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n // Workspace ID is configured but doesn't exist\n const resolved = await getWorkspaceId();\n output.error(\n 'Configured workspace not found',\n `ID: ${resolved?.workspaceId || 'unknown'}\\n\\nThe workspace may have been deleted. Select a new one:\\n guild workspace select`\n );\n return;\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to fetch workspace: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to get workspace: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport * as fs from 'fs/promises';\nimport { createOutputWriter } from '../../lib/output.js';\nimport {\n isAgentDirectory,\n loadLocalConfig,\n getLocalConfigPath,\n loadGlobalConfig,\n getGlobalConfigDir,\n getGlobalConfigPath,\n} from '../../lib/guild-config.js';\n\nexport function createWorkspaceClearCommand(): Command {\n const cmd = new Command('clear');\n\n cmd.description('Clear the default workspace setting').action(async () => {\n const output = createOutputWriter();\n try {\n if (await isAgentDirectory()) {\n // In agent directory: remove workspace_id from guild.json\n const localConfig = await loadLocalConfig();\n if (!localConfig || !('workspace_id' in localConfig)) {\n output.progress('No default workspace was set.');\n return;\n }\n const { workspace_id: _removed, ...updated } = localConfig;\n await fs.writeFile(\n getLocalConfigPath(),\n JSON.stringify(updated, null, 2) + '\\n'\n );\n output.success('Cleared workspace setting for this agent');\n return;\n }\n\n // Not in agent directory: remove default_workspace from global config\n const globalConfig = await loadGlobalConfig();\n if (\n !globalConfig ||\n (!('default_workspace' in globalConfig) &&\n !('default_workspace_name' in globalConfig))\n ) {\n output.progress('No default workspace was set.');\n return;\n }\n\n const {\n default_workspace: _ws,\n default_workspace_name: _wsName,\n ...rest\n } = globalConfig;\n\n await fs.mkdir(getGlobalConfigDir(), { recursive: true });\n await fs.writeFile(getGlobalConfigPath(), JSON.stringify(rest, null, 2) + '\\n');\n output.success('Default workspace cleared');\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n output.error(`Failed to clear workspace: ${message}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Workspace resolution helper for workspace subcommands.\n *\n * Resolves a workspace identifier (UUID or human-readable name) to a UUID.\n * Used by `guild workspace agent add`, `list`, and `remove`.\n */\n\nimport { GuildAPIClient } from './api-client.js';\nimport type { Workspace, WorkspaceListResponse } from './api-types.js';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Match a workspace against a search argument (case-insensitive name, full_name, or exact ID).\n */\nfunction matchesWorkspaceArg(w: Workspace, arg: string): boolean {\n return (\n w.id === arg ||\n w.name === arg ||\n w.name.toLowerCase() === arg.toLowerCase() ||\n w.full_name === arg ||\n w.full_name?.toLowerCase() === arg.toLowerCase()\n );\n}\n\n/**\n * Resolve a workspace ID or name to a workspace UUID.\n *\n * UUID inputs pass through unchanged. Name inputs are resolved by searching\n * the user's workspaces via `GET /me/workspaces?filter=all&search=...` first,\n * with a `fetchAll` fallback for IDs and names not matched by the search.\n *\n * Throws an `Error` with message `Workspace \"<idOrName>\" not found` if\n * nothing resolves \u2014 callers should catch this and call `output.error` +\n * `process.exit(1)`.\n */\nexport async function resolveWorkspaceId(\n client: GuildAPIClient,\n idOrName: string\n): Promise<string> {\n // Short-circuit UUID inputs \u2014 pass through unchanged\n if (UUID_RE.test(idOrName)) {\n return idOrName;\n }\n\n // Use server-side search first. Extract just the name part for full_name\n // inputs (e.g. \"owner/workspace-name\") since the backend searches by name.\n const searchTerm = idOrName.includes('/')\n ? (idOrName.split('/').pop() ?? idOrName)\n : idOrName;\n\n const searchResults = await client.get<WorkspaceListResponse>(\n `/me/workspaces?filter=all&search=${encodeURIComponent(searchTerm)}&limit=100`\n );\n\n const directMatch = searchResults.items.find((w) => matchesWorkspaceArg(w, idOrName));\n if (directMatch) {\n return directMatch.id;\n }\n\n // Fall back to fetching all workspaces (handles IDs and names not returned\n // by search, e.g. when the backend's ILIKE search doesn't match full_name).\n const allWorkspaces = await client.fetchAll<Workspace>('/me/workspaces?filter=all');\n const fallbackMatch = allWorkspaces.find((w) => matchesWorkspaceArg(w, idOrName));\n if (fallbackMatch) {\n return fallbackMatch.id;\n }\n\n throw new Error(`Workspace \"${idOrName}\" not found`);\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { getWorkspaceId } from '../../../lib/guild-config.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveWorkspaceId } from '../../../lib/workspace-helpers.js';\nimport type { Agent, WorkspaceAgent } from '../../../lib/api-types.js';\n\nexport function createWorkspaceAgentAddCommand(): Command {\n const cmd = new Command('add');\n\n cmd\n .description('Add an agent to a workspace')\n .argument('<agent>', 'Agent identifier (e.g., owner~agent-name or UUID)')\n .option('--workspace <id>', 'Workspace ID or name')\n .option(\n '--no-autoupdate',\n 'Disable automatic updates for this agent (default: autoupdate enabled)'\n )\n .action(\n async (\n agentIdentifier: string,\n options: { workspace?: string; autoupdate: boolean }\n ) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Resolve workspace\n let workspaceId = options.workspace;\n if (workspaceId) {\n try {\n workspaceId = await resolveWorkspaceId(client, workspaceId);\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('Workspace \"')) {\n output.error('Workspace not found');\n process.exit(1);\n }\n throw err; // let the outer catch handle network/auth errors via handleAxiosError\n }\n } else {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error(\n 'No workspace specified.',\n 'Either use --workspace flag:\\n guild workspace agent add <agent> --workspace <workspace-id>\\n\\nOr select a default workspace:\\n guild workspace select'\n );\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n // Resolve agent - the backend accepts both UUID and owner~agent-name format\n // First, look up the agent to get its ID and display info\n let agent: Agent;\n try {\n agent = await client.get<Agent>(`/agents/${agentIdentifier}`);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(`Agent \"${agentIdentifier}\" not found`);\n process.exit(1);\n }\n if (\n formattedError.code === ErrorCodes.FORBIDDEN ||\n formattedError.code === ErrorCodes.AUTH_TOKEN_INVALID\n ) {\n output.error(\n 'Cannot add agent: access denied. Ensure the agent is public or check your permissions.'\n );\n process.exit(1);\n }\n throw error;\n }\n\n // Add agent to workspace\n const response = await client.post<WorkspaceAgent>(\n `/workspaces/${workspaceId}/workspace_agents`,\n {\n agent_id: agent.id,\n should_autoupdate: options.autoupdate,\n }\n );\n\n // Display success\n const versionDisplay = response.agent_version.version_number\n ? `v${response.agent_version.version_number}`\n : (response.agent_version.sha?.slice(0, 7) ?? '-');\n\n const workspaceName = response.workspace?.name || 'workspace';\n output.success(\n `Added ${response.agent.full_name} to workspace \"${workspaceName}\"`,\n {\n Agent: response.agent.full_name,\n Version: versionDisplay,\n Autoupdate: response.should_autoupdate ? 'enabled' : 'disabled',\n }\n );\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.BAD_REQUEST) {\n // Handle specific error messages from backend\n const details = formattedError.details || '';\n if (\n details.includes('already added') ||\n details.includes('already installed')\n ) {\n output.error('This agent is already installed in the workspace');\n } else if (details.includes('No published version')) {\n output.error('No published version found for this agent');\n } else {\n output.error(details);\n }\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Workspace not found');\n process.exit(1);\n }\n\n output.error(`Failed to add agent: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { getWorkspaceId } from '../../../lib/guild-config.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter, formatWorkspaceAgentTable } from '../../../lib/output.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { resolveWorkspaceId } from '../../../lib/workspace-helpers.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../../lib/api-types.js';\nimport type { WorkspaceAgentListResponse } from '../../../lib/api-types.js';\n\nexport function createWorkspaceAgentListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List agents in a workspace')\n .option('--workspace <id>', 'Workspace ID or name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (options: { workspace?: string; limit: string; offset: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Resolve workspace\n let workspaceId = options.workspace;\n if (workspaceId) {\n try {\n workspaceId = await resolveWorkspaceId(client, workspaceId);\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('Workspace \"')) {\n output.error('Workspace not found');\n process.exit(1);\n }\n throw err; // let the outer catch handle network/auth errors via handleAxiosError\n }\n } else {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error(\n 'No workspace specified.',\n 'Either use --workspace flag:\\n guild workspace agent list --workspace <workspace-id>\\n\\nOr select a default workspace:\\n guild workspace select'\n );\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n // List workspace agents\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n const response = await client.get<WorkspaceAgentListResponse>(\n `/workspaces/${workspaceId}/workspace_agents?${params.toString()}`\n );\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatWorkspaceAgentTable(response.items);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Workspace not found');\n process.exit(1);\n }\n\n output.error(`Failed to list agents: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { getWorkspaceId } from '../../../lib/guild-config.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveWorkspaceId } from '../../../lib/workspace-helpers.js';\nimport type { WorkspaceAgent } from '../../../lib/api-types.js';\n\nexport function createWorkspaceAgentRemoveCommand(): Command {\n const cmd = new Command('remove');\n\n cmd\n .description('Remove an agent from a workspace')\n .argument('<agent>', 'Agent identifier (e.g., owner~agent-name or UUID)')\n .option('--workspace <id>', 'Workspace ID or name')\n .action(async (agentIdentifier: string, options: { workspace?: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Resolve workspace\n let workspaceId = options.workspace;\n if (workspaceId) {\n try {\n workspaceId = await resolveWorkspaceId(client, workspaceId);\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('Workspace \"')) {\n output.error('Workspace not found');\n process.exit(1);\n }\n throw err; // let the outer catch handle network/auth errors via handleAxiosError\n }\n } else {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error(\n 'No workspace specified.',\n 'Either use --workspace flag:\\n guild workspace agent remove <agent> --workspace <workspace-id>\\n\\nOr select a default workspace:\\n guild workspace select'\n );\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n // List all workspace agents to find the one to remove\n const allWorkspaceAgents = await client.fetchAll<WorkspaceAgent>(\n `/workspaces/${workspaceId}/workspace_agents`\n );\n\n // Find the agent by identifier (match full_name, name, agent id, or workspace_agent id)\n const workspaceAgent = allWorkspaceAgents.find(\n (wa) =>\n wa.id === agentIdentifier ||\n wa.agent.full_name === agentIdentifier ||\n wa.agent.name === agentIdentifier ||\n wa.agent.id === agentIdentifier\n );\n\n if (!workspaceAgent) {\n output.error(`Agent \"${agentIdentifier}\" is not installed in this workspace`);\n process.exit(1);\n }\n\n // Remove the workspace agent\n await client.delete(`/workspace_agents/${workspaceAgent.id}`);\n\n output.success(`Removed ${workspaceAgent.agent.full_name} from workspace`);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Workspace or agent not found');\n process.exit(1);\n }\n\n output.error(`Failed to remove agent: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter, formatContextTable } from '../../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../../lib/api-types.js';\nimport type { ContextListResponse } from '../../../lib/api-types.js';\n\nexport function createWorkspaceContextListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List context versions for a workspace')\n .argument('<workspace>', 'Workspace ID or full name (e.g., owner/workspace-name)')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (workspaceId: string, options: { limit: string; offset: string }) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n const response = await client.get<ContextListResponse>(\n `/workspaces/${workspaceId}/contexts?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatContextTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Workspace not found: ${workspaceId}`,\n 'Run: guild workspace list'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to list contexts: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to list contexts: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { ContextListResponse } from '../../../lib/api-types.js';\n\nexport function createWorkspaceContextGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get context details')\n .argument('<workspace>', 'Workspace ID or full name (e.g., owner/workspace-name)')\n .argument('<context-id>', 'Context ID')\n .action(async (workspaceId: string, contextId: string) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n // Backend doesn't have GET endpoint for individual context\n // So we fetch all contexts and filter client-side\n const response = await client.get<ContextListResponse>(\n `/workspaces/${workspaceId}/contexts`\n );\n\n const context = response.items.find((ctx) => ctx.id === contextId);\n\n if (!context) {\n output.error(\n `Context not found: ${contextId}`,\n `Run: guild workspace context list ${workspaceId}`\n );\n process.exit(1);\n }\n\n output.data(context);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Context not found: ${contextId}`,\n `Run: guild workspace context list ${workspaceId}`\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to get context: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to get context: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { spawnSync } from 'child_process';\nimport { mkdtempSync, writeFileSync, readFileSync, rmSync } from 'fs';\nimport { join } from 'path';\nimport { tmpdir } from 'os';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { Context, ContextListResponse } from '../../../lib/api-types.js';\n\nexport function createWorkspaceContextEditCommand(): Command {\n const cmd = new Command('edit');\n\n cmd\n .description('Edit workspace context (creates a new draft version)')\n .argument('<workspace>', 'Workspace ID or full name (e.g., owner/workspace-name)')\n .option('--from <context-id>', 'Edit from a specific context version')\n .action(async (workspaceId: string, options: { from?: string }) => {\n const output = createOutputWriter();\n let tempDir: string | null = null;\n\n try {\n const client = new GuildAPIClient();\n\n // Get the context to edit from\n let sourceContext: Context | null = null;\n\n // Fetch all contexts (backend doesn't have GET for individual context)\n const response = await client.get<ContextListResponse>(\n `/workspaces/${workspaceId}/contexts`\n );\n\n const contexts = response.items;\n\n if (options.from) {\n // Edit from specific context version\n sourceContext = contexts.find((ctx) => ctx.id === options.from) || null;\n\n if (!sourceContext) {\n output.error(\n `Context not found: ${options.from}`,\n `Run: guild workspace context list ${workspaceId}`\n );\n process.exit(1);\n }\n } else {\n // Find the published context\n sourceContext = contexts.find((ctx) => ctx.status === 'PUBLISHED') || null;\n }\n\n // Get the editor from environment\n const editor =\n process.env.EDITOR || process.env.VISUAL || process.env.GIT_EDITOR;\n\n if (!editor) {\n output.error(\n 'No editor configured',\n 'Set EDITOR environment variable:\\n export EDITOR=vim\\n # or\\n export EDITOR=\"code --wait\"'\n );\n process.exit(1);\n }\n\n // Create temp file with current context content\n tempDir = mkdtempSync(join(tmpdir(), 'guild-context-'));\n const tempFile = join(tempDir, 'workspace.md');\n const currentContent = sourceContext?.manual_context || '';\n\n writeFileSync(tempFile, currentContent, 'utf-8');\n\n output.progress('Opening editor...');\n\n // Open editor\n const result = spawnSync(editor, [tempFile], {\n stdio: 'inherit',\n shell: true,\n });\n\n if (result.status !== 0 && result.status !== null) {\n throw new Error(`Editor exited with code ${result.status}`);\n }\n\n // Read edited content\n const editedContent = readFileSync(tempFile, 'utf-8');\n\n // Create new draft context\n const newContext = await client.post<Context>(\n `/workspaces/${workspaceId}/contexts`,\n {\n status: 'DRAFT',\n context: editedContent,\n summary: null,\n }\n );\n\n output.success(`Draft context created: ${newContext.id}`, {\n publish: `guild workspace context publish ${workspaceId} ${newContext.id}`,\n });\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n if (options.from) {\n output.error(\n `Context not found: ${options.from}`,\n `Run: guild workspace context list ${workspaceId}`\n );\n } else {\n output.error(\n `Workspace not found: ${workspaceId}`,\n 'Run: guild workspace list'\n );\n }\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to edit context: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to edit context: ${formattedError.details}`);\n process.exit(1);\n } finally {\n // Cleanup temp directory\n if (tempDir) {\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { handleAxiosError, ErrorCodes } from '../../../lib/errors.js';\nimport { createOutputWriter } from '../../../lib/output.js';\n\nexport function createWorkspaceContextPublishCommand(): Command {\n const cmd = new Command('publish');\n\n cmd\n .description('Publish a draft context version')\n .argument('<workspace>', 'Workspace ID or full name (e.g., owner/workspace-name)')\n .argument('<context-id>', 'Context ID to publish')\n .action(async (workspaceId: string, contextId: string) => {\n const output = createOutputWriter();\n\n try {\n const client = new GuildAPIClient();\n await client.patch(`/contexts/${contextId}`, {\n status: 'PUBLISHED',\n });\n\n output.success(`Context ${contextId} published successfully`);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error(\n `Context not found: ${contextId}`,\n `Run: guild workspace context list ${workspaceId}`\n );\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.CONN_REFUSED) {\n output.error(\n `Failed to publish context: ${formattedError.details}`,\n 'Run with --debug for more details'\n );\n process.exit(1);\n }\n\n output.error(`Failed to publish context: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { getWorkspaceId } from '../../lib/guild-config.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatTriggerTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { TriggerListResponse } from '../../lib/api-types.js';\n\nexport function createTriggerListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List all triggers in a workspace')\n .option('--workspace <id>', 'Workspace ID or name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (options: { workspace?: string; limit: string; offset: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n // Resolve workspace\n let workspaceId = options.workspace;\n if (!workspaceId) {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error('No workspace specified. Run: guild workspace select');\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n const client = new GuildAPIClient();\n\n // Build query parameters\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<TriggerListResponse>(\n `/workspaces/${workspaceId}/triggers?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatTriggerTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Trigger } from '../../lib/api-types.js';\n\nexport function createTriggerGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get trigger details')\n .argument('<trigger-id>', 'Trigger ID')\n .action(async (triggerId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.get<Trigger>(`/triggers/${triggerId}`);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { getWorkspaceId } from '../../lib/guild-config.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport {\n TIME_TRIGGER_FREQUENCIES,\n type Trigger,\n type Workspace,\n type WorkspaceAgent,\n type TriggerIntegration,\n type TimeTriggerFrequency,\n} from '../../lib/api-types.js';\n\ninterface CreateTriggerOptions {\n workspace?: string;\n type: string;\n integration?: string;\n event?: string;\n action?: string;\n agent: string;\n frequency?: string;\n time?: string;\n daysOfWeek?: string;\n daysOfMonth?: string;\n minutesOfHour?: string;\n cronExpression?: string;\n cronTimezone?: string;\n input?: string;\n serviceConfig?: string;\n}\n\nexport function createTriggerCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new trigger')\n .option('--workspace <id>', 'Workspace ID or name')\n .requiredOption('--type <type>', 'Trigger type: webhook or time')\n .requiredOption('--agent <identifier>', 'Agent identifier (e.g., owner~agent-name)')\n // Webhook options\n .option(\n '--integration <name>',\n 'Integration name for webhook triggers (e.g., github, slack, jira)'\n )\n .option('--event <event>', 'Event type (e.g., app_mention, issues)')\n .option('--action <action>', 'Event action (e.g., opened, created)')\n .option('--service-config <json>', 'Service-specific config as JSON')\n // Time options\n .option(\n '--frequency <freq>',\n 'Time trigger frequency: HOURLY, DAILY, WEEKLY, MONTHLY, CRON'\n )\n .option('--time <time>', 'Time of day in HH:MM format')\n .option(\n '--days-of-week <days>',\n 'Days of week (comma-separated: MONDAY,TUESDAY,...)'\n )\n .option('--days-of-month <days>', 'Days of month (comma-separated: 1,15,-1)')\n .option('--minutes-of-hour <minutes>', 'Minutes of hour, comma-separated (0-59)')\n .option(\n '--cron-expression <expression>',\n '5-field cron expression (required with --frequency CRON)'\n )\n .option(\n '--cron-timezone <timezone>',\n 'IANA timezone for --cron-expression (default: UTC)'\n )\n .option('--input <json>', 'Agent input as JSON object')\n .action(async (options: CreateTriggerOptions) => {\n const output = createOutputWriter();\n try {\n // Validate trigger type before auth (fail fast on bad input)\n const triggerType = options.type.toLowerCase();\n if (triggerType !== 'webhook' && triggerType !== 'time') {\n output.error('--type must be \"webhook\" or \"time\"');\n process.exit(1);\n }\n\n // Validate type-specific required options before auth\n if (triggerType === 'webhook' && !options.integration) {\n output.error(\n '--integration is required for webhook triggers (e.g., --integration github)'\n );\n process.exit(1);\n }\n if (triggerType === 'time' && !options.frequency) {\n output.error(\n `--frequency is required for time triggers. Valid frequencies: ${TIME_TRIGGER_FREQUENCIES.join(', ')}`\n );\n process.exit(1);\n }\n if (\n triggerType === 'time' &&\n options.frequency?.toUpperCase() === 'CRON' &&\n !options.cronExpression\n ) {\n output.error('--cron-expression is required when --frequency is CRON');\n process.exit(1);\n }\n\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n // Resolve workspace\n let workspaceId = options.workspace;\n if (!workspaceId) {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error('No workspace specified. Run: guild workspace select');\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n const client = new GuildAPIClient();\n\n // Find workspace_agent_id from agent identifier\n const allWorkspaceAgents = await client.fetchAll<WorkspaceAgent>(\n `/workspaces/${workspaceId}/workspace_agents`\n );\n\n const workspaceAgent = allWorkspaceAgents.find(\n (wa) =>\n wa.agent.full_name === options.agent ||\n wa.agent.name === options.agent ||\n wa.agent.id === options.agent\n );\n\n if (!workspaceAgent) {\n output.error(\n `Agent \"${options.agent}\" not found. Run: guild workspace agent add ${options.agent}`\n );\n process.exit(1);\n }\n\n // Build request body based on trigger type\n let body: Record<string, unknown>;\n\n if (triggerType === 'webhook') {\n // Fetch workspace details to get the owner account ID\n const workspace = await client.get<Workspace>(`/workspaces/${workspaceId}`);\n\n if (!workspace.owner) {\n output.error('Could not resolve workspace owner');\n process.exit(1);\n }\n\n // Fetch integrations with webhook configs for this account\n const integrations = await client.fetchAll<TriggerIntegration>(\n `/accounts/${workspace.owner.id}/integrations?has_webhooks_only=true`\n );\n\n // Match by integration name (case-insensitive)\n const integrationName = (options.integration as string).toLowerCase();\n const integration = integrations.find(\n (i) =>\n i.name.toLowerCase() === integrationName ||\n i.full_name.toLowerCase() === integrationName\n );\n\n if (!integration) {\n const available = integrations.map((i) => i.name).join(', ');\n output.error(\n `Integration \"${options.integration}\" not found.${available ? ` Available: ${available}` : ' No webhook integrations configured.'}`\n );\n process.exit(1);\n }\n\n if (!integration.webhook_config) {\n output.error(\n `Integration \"${integration.name}\" does not have webhooks configured`\n );\n process.exit(1);\n }\n\n body = {\n type: 'webhook',\n workspace_agent_id: workspaceAgent.id,\n webhook_config_id: integration.webhook_config.id,\n };\n\n if (options.event) {\n body.event_type = options.event;\n }\n if (options.action) {\n body.action = options.action;\n }\n if (options.serviceConfig) {\n try {\n body.service_config = JSON.parse(options.serviceConfig);\n } catch {\n output.error('--service-config must be valid JSON');\n process.exit(1);\n }\n }\n } else {\n // Time trigger\n let agentInput: Record<string, unknown> = {};\n if (options.input) {\n try {\n agentInput = JSON.parse(options.input);\n } catch {\n output.error('--input must be valid JSON');\n process.exit(1);\n }\n }\n\n const frequency = (options.frequency as string).toUpperCase();\n if (!TIME_TRIGGER_FREQUENCIES.includes(frequency as TimeTriggerFrequency)) {\n output.error(\n `Invalid frequency \"${options.frequency}\". Valid: ${TIME_TRIGGER_FREQUENCIES.join(', ')}`\n );\n process.exit(1);\n }\n\n // Validate options match the frequency\n const frequencyOptions: Record<string, Set<string>> = {\n HOURLY: new Set(['minutesOfHour']),\n DAILY: new Set(['time']),\n WEEKLY: new Set(['time', 'daysOfWeek']),\n MONTHLY: new Set(['time', 'daysOfMonth']),\n CRON: new Set(['cronExpression', 'cronTimezone']),\n };\n const allOptions = new Set(\n Object.values(frequencyOptions).flatMap((s) => [...s])\n );\n const allowed = frequencyOptions[frequency] ?? new Set<string>();\n const invalid = [...allOptions]\n .filter(\n (opt) => !allowed.has(opt) && options[opt as keyof CreateTriggerOptions]\n )\n .map((opt) => '--' + opt.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase()));\n if (invalid.length > 0) {\n output.error(\n `${invalid.join(', ')} cannot be used with ${frequency} frequency`\n );\n process.exit(1);\n }\n\n body = {\n type: 'time',\n frequency: frequency as TimeTriggerFrequency,\n workspace_agent_id: workspaceAgent.id,\n agent_input: agentInput,\n };\n\n if (options.time) body.time_of_day = options.time;\n if (options.daysOfWeek) body.days_of_week = options.daysOfWeek;\n if (options.daysOfMonth) body.days_of_month = options.daysOfMonth;\n if (options.minutesOfHour) body.minutes_of_hour = options.minutesOfHour;\n if (options.cronExpression) body.cron_expression = options.cronExpression;\n if (options.cronTimezone) body.cron_timezone = options.cronTimezone;\n }\n\n const response = await client.post<Trigger>(\n `/workspaces/${workspaceId}/triggers`,\n body\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Workspace not found. Run: guild workspace select');\n process.exit(1);\n }\n\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport {\n TIME_TRIGGER_FREQUENCIES,\n type Trigger,\n type TimeTriggerFrequency,\n} from '../../lib/api-types.js';\n\ninterface UpdateTriggerOptions {\n // Webhook options\n event?: string;\n action?: string;\n serviceConfig?: string;\n // Time options\n frequency?: string;\n time?: string;\n daysOfWeek?: string;\n daysOfMonth?: string;\n minutesOfHour?: string;\n cronExpression?: string;\n cronTimezone?: string;\n input?: string;\n}\n\nexport function createTriggerUpdateCommand(): Command {\n const cmd = new Command('update');\n\n cmd\n .description('Update a trigger')\n .argument('<trigger-id>', 'Trigger ID')\n // Webhook options\n .option('--event <event>', 'Event type (for webhook triggers)')\n .option('--action <action>', 'Event action (for webhook triggers)')\n .option(\n '--service-config <json>',\n 'Service-specific config as JSON (for webhook triggers)'\n )\n // Time options\n .option(\n '--frequency <freq>',\n 'Frequency: HOURLY, DAILY, WEEKLY, MONTHLY, CRON (for time triggers)'\n )\n .option('--time <time>', 'Time of day in HH:MM format (for time triggers)')\n .option(\n '--days-of-week <days>',\n 'Days of week, comma-separated (for time triggers)'\n )\n .option(\n '--days-of-month <days>',\n 'Days of month, comma-separated (for time triggers)'\n )\n .option(\n '--minutes-of-hour <minutes>',\n 'Minutes of hour, comma-separated (0-59, for HOURLY triggers)'\n )\n .option(\n '--cron-expression <expression>',\n '5-field cron expression (for CRON triggers)'\n )\n .option(\n '--cron-timezone <timezone>',\n 'IANA timezone for --cron-expression (default: UTC)'\n )\n .option('--input <json>', 'Agent input as JSON object (for time triggers)')\n .action(async (triggerId: string, options: UpdateTriggerOptions) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Build request body with only provided options\n const body: Record<string, unknown> = {};\n\n // Webhook options\n if (options.event !== undefined) {\n body.event_type = options.event;\n }\n if (options.action !== undefined) {\n body.action = options.action;\n }\n if (options.serviceConfig !== undefined) {\n try {\n body.service_config = JSON.parse(options.serviceConfig);\n } catch {\n output.error('--service-config must be valid JSON');\n process.exit(1);\n }\n }\n\n // Time options\n let frequency: string | undefined;\n if (options.frequency !== undefined) {\n frequency = options.frequency.toUpperCase();\n if (!TIME_TRIGGER_FREQUENCIES.includes(frequency as TimeTriggerFrequency)) {\n output.error(\n `Invalid frequency \"${options.frequency}\". Valid: ${TIME_TRIGGER_FREQUENCIES.join(', ')}`\n );\n process.exit(1);\n }\n body.frequency = frequency;\n }\n\n // Validate options match the frequency (when frequency is being set)\n if (frequency) {\n const frequencyOptions: Record<string, Set<string>> = {\n HOURLY: new Set(['minutesOfHour']),\n DAILY: new Set(['time']),\n WEEKLY: new Set(['time', 'daysOfWeek']),\n MONTHLY: new Set(['time', 'daysOfMonth']),\n CRON: new Set(['cronExpression', 'cronTimezone']),\n };\n const allOptions = new Set(\n Object.values(frequencyOptions).flatMap((s) => [...s])\n );\n const allowed = frequencyOptions[frequency] ?? new Set<string>();\n const invalid = [...allOptions]\n .filter(\n (opt) =>\n !allowed.has(opt) &&\n options[opt as keyof UpdateTriggerOptions] !== undefined\n )\n .map((opt) => '--' + opt.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase()));\n if (invalid.length > 0) {\n output.error(\n `${invalid.join(', ')} cannot be used with ${frequency} frequency`\n );\n process.exit(1);\n }\n }\n\n if (options.time !== undefined) body.time_of_day = options.time;\n if (options.daysOfWeek !== undefined) body.days_of_week = options.daysOfWeek;\n if (options.daysOfMonth !== undefined) body.days_of_month = options.daysOfMonth;\n if (options.minutesOfHour !== undefined)\n body.minutes_of_hour = options.minutesOfHour;\n if (options.cronExpression !== undefined)\n body.cron_expression = options.cronExpression;\n if (options.cronTimezone !== undefined)\n body.cron_timezone = options.cronTimezone;\n if (options.input !== undefined) {\n try {\n body.agent_input = JSON.parse(options.input);\n } catch {\n output.error('--input must be valid JSON');\n process.exit(1);\n }\n }\n\n if (Object.keys(body).length === 0) {\n output.error('No update options provided. Run: guild trigger update --help');\n process.exit(1);\n }\n\n const response = await client.patch<Trigger>(`/triggers/${triggerId}`, body);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Trigger not found.');\n process.exit(1);\n }\n\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Trigger } from '../../lib/api-types.js';\n\nexport function createTriggerActivateCommand(): Command {\n const cmd = new Command('activate');\n\n cmd\n .description('Activate a trigger')\n .argument('<trigger-id>', 'Trigger ID')\n .action(async (triggerId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.post<Trigger>(\n `/triggers/${triggerId}/activate`,\n {}\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Trigger not found.');\n process.exit(1);\n }\n\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Trigger } from '../../lib/api-types.js';\n\nexport function createTriggerDeactivateCommand(): Command {\n const cmd = new Command('deactivate');\n\n cmd\n .description('Deactivate a trigger')\n .argument('<trigger-id>', 'Trigger ID')\n .action(async (triggerId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.post<Trigger>(\n `/triggers/${triggerId}/deactivate`,\n {}\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Trigger not found.');\n process.exit(1);\n }\n\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError, ErrorCodes } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { TriggerSessionListResponse } from '../../lib/api-types.js';\n\nexport function createTriggerSessionsCommand(): Command {\n const cmd = new Command('sessions');\n\n cmd\n .description('List sessions spawned by a trigger')\n .argument('<trigger-id>', 'Trigger ID')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (triggerId: string, options: { limit: string; offset: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Build query parameters\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<TriggerSessionListResponse>(\n `/triggers/${triggerId}/sessions?${params.toString()}`\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n\n if (formattedError.code === ErrorCodes.AUTH_REQUIRED) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (formattedError.code === ErrorCodes.NOT_FOUND) {\n output.error('Trigger not found.');\n process.exit(1);\n }\n\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { getWorkspaceId } from '../../lib/guild-config.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatSessionTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { PaginatedResponse, Session } from '../../lib/api-types.js';\n\nexport function createSessionListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List sessions in a workspace')\n .option('--workspace <id>', 'Workspace ID or name (e.g., owner~workspace-name)')\n .option('--type <type>', 'Filter by session type: chat, webhook, time, agent_test')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (options: {\n workspace?: string;\n type?: string;\n limit: string;\n offset: string;\n }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n let workspaceId = options.workspace;\n if (!workspaceId) {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error('No workspace specified. Run: guild workspace select');\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n const client = new GuildAPIClient();\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n if (options.type) {\n params.append('types', options.type.toLowerCase());\n }\n\n const response = await client.get<PaginatedResponse<Session>>(\n `/workspaces/${workspaceId}/sessions?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatSessionTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list sessions: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createSessionGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get session details')\n .argument('<session-id>', 'Session ID')\n .action(async (sessionId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.get(`/sessions/${sessionId}`);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get session: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport {\n parseEventFilter,\n DEFAULT_EVENT_TYPES,\n USER_EVENT_TYPES,\n SYSTEM_EVENT_TYPES,\n} from '../../lib/event-filter.js';\nimport { DEFAULT_PAGE_LIMIT_LARGE } from '../../lib/api-types.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createSessionEventsCommand(): Command {\n const cmd = new Command('events');\n\n cmd\n .description('List events in a session')\n .argument('<session-id>', 'Session ID')\n .option(\n '--events <types>',\n 'Event types to show (default: user). Shorthands: none, user, system, all, or comma-separated type names'\n )\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT_LARGE})`,\n String(DEFAULT_PAGE_LIMIT_LARGE)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .addHelpText(\n 'after',\n [\n '',\n 'Available event types:',\n ' User events (shown by default):',\n ` ${USER_EVENT_TYPES.join(', ')}`,\n '',\n ' System / debug events:',\n ` ${SYSTEM_EVENT_TYPES.join(', ')}`,\n ].join('\\n')\n )\n .action(\n async (\n sessionId: string,\n options: { events?: string; limit: string; offset: string }\n ) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n const rawFilter = options.events\n ? parseEventFilter(options.events)\n : DEFAULT_EVENT_TYPES;\n if (rawFilter.size > 0) {\n params.append('types', [...rawFilter].join(','));\n }\n\n const response = await client.get(\n `/sessions/${sessionId}/events?${params.toString()}`\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get session events: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatTaskTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT_LARGE } from '../../lib/api-types.js';\nimport type { PaginatedResponse, Task } from '../../lib/api-types.js';\n\nexport function createSessionTasksCommand(): Command {\n const cmd = new Command('tasks');\n\n cmd\n .description('List tasks in a session')\n .argument('<session-id>', 'Session ID')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT_LARGE})`,\n String(DEFAULT_PAGE_LIMIT_LARGE)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (sessionId: string, options: { limit: string; offset: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<PaginatedResponse<Task>>(\n `/sessions/${sessionId}/tasks?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatTaskTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get session tasks: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { getWorkspaceId } from '../../lib/guild-config.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createSessionCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new session')\n .option('--workspace <id>', 'Workspace ID or name (e.g., owner~workspace-name)')\n .option('--type <type>', 'Session type: chat or agent_test (default: chat)', 'chat')\n .option('--prompt <text>', 'Initial prompt (required for chat sessions)')\n .option('--agent <identifier>', 'Agent identifier, e.g., owner~agent-name')\n .action(\n async (options: {\n workspace?: string;\n type: string;\n prompt?: string;\n agent?: string;\n }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (options.type === 'chat' && !options.prompt) {\n output.error('--prompt is required for chat sessions');\n process.exit(1);\n }\n\n let workspaceId = options.workspace;\n if (!workspaceId) {\n const resolved = await getWorkspaceId();\n if (!resolved) {\n output.error('No workspace specified. Run: guild workspace select');\n process.exit(1);\n }\n workspaceId = resolved.workspaceId;\n }\n\n const client = new GuildAPIClient();\n\n const body: Record<string, string> = {\n session_type: options.type,\n };\n if (options.prompt) {\n body.initial_prompt = options.prompt;\n }\n if (options.agent) {\n body.agent_id = options.agent;\n }\n\n const response = await client.post(\n `/workspaces/${workspaceId}/sessions`,\n body\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create session: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createSessionSendCommand(): Command {\n const cmd = new Command('send');\n\n cmd\n .description('Send a user message to a session')\n .argument('<session-id>', 'Session ID')\n .option('--message <text>', 'Text message content')\n .option('--json <json>', 'JSON content object (sets mode to json)')\n .action(async (sessionId: string, options: { message?: string; json?: string }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n if (!options.message && !options.json) {\n output.error('Either --message or --json is required');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n let body: { content: string | Record<string, unknown>; mode: string };\n if (options.json) {\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(options.json);\n } catch {\n output.error('--json value must be valid JSON');\n process.exit(1);\n }\n body = { content: parsed, mode: 'json' };\n } else {\n body = { content: options.message as string, mode: 'text' };\n }\n\n const response = await client.post(`/sessions/${sessionId}/events`, body);\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to send message: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createSessionInterruptCommand(): Command {\n const cmd = new Command('interrupt');\n\n cmd\n .description('Interrupt a running session')\n .argument('<session-id>', 'Session ID')\n .action(async (sessionId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.post(`/sessions/${sessionId}/interrupt`, {});\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to interrupt session: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatJobStepTable } from '../../lib/output.js';\nimport type { Job, JobStepsResponse } from '../../lib/api-types.js';\n\nexport function createJobGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get job details and steps')\n .argument('<job-id>', 'Job ID')\n .action(async (jobId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const [job, stepsResponse] = await Promise.all([\n client.get<Job>(`/jobs/${jobId}`),\n client.get<JobStepsResponse>(`/jobs/${jobId}/steps`),\n ]);\n\n if (isMachineReadable()) {\n console.log(JSON.stringify({ ...job, steps: stepsResponse.steps }, null, 2));\n } else {\n output.data(job);\n console.log();\n formatJobStepTable(stepsResponse.steps);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get job: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { JobStepsResponse } from '../../lib/api-types.js';\n\nexport function createJobGetStepCommand(): Command {\n const cmd = new Command('get-step');\n\n cmd\n .description('Get details of a step in a job')\n .argument('<job-id>', 'Job ID')\n .argument('<step-name>', 'Step name')\n .action(async (jobId: string, stepName: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const stepsResponse = await client.get<JobStepsResponse>(\n `/jobs/${jobId}/steps`\n );\n\n const step = stepsResponse.steps.find((s) => s.name === stepName);\n if (!step) {\n const available = stepsResponse.steps.map((s) => s.name).join(', ');\n output.error(\n `Step \"${stepName}\" not found. Available steps: ${available || 'none'}`\n );\n process.exit(1);\n }\n\n output.data(step);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get job step: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig } from '../../lib/guild-config.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createConfigListCommand(): Command {\n const cmd = new Command('list');\n\n cmd.description('Show all configuration values').action(async () => {\n const output = createOutputWriter();\n const config = await loadConfig();\n if (isMachineReadable()) {\n output.data({\n global: config.global || null,\n local: config.local || null,\n });\n return;\n }\n\n const hasGlobal = config.global && Object.keys(config.global).length > 0;\n const hasLocal = config.local && Object.keys(config.local).length > 0;\n\n if (!hasGlobal && !hasLocal) {\n output.progress('No configuration found.');\n output.progress('');\n output.progress('Set a default workspace:');\n output.progress(chalk.dim(' guild workspace select'));\n return;\n }\n\n if (config.global && hasGlobal) {\n output.progress(\n chalk.bold('Global config') + chalk.dim(' (~/.guild/config.json):')\n );\n for (const [key, value] of Object.entries(config.global)) {\n output.progress(` ${key}: ${chalk.cyan(String(value))}`);\n }\n }\n\n if (config.local && hasLocal) {\n if (hasGlobal) output.progress('');\n output.progress(chalk.bold('Local config') + chalk.dim(' (guild.json):'));\n for (const [key, value] of Object.entries(config.local)) {\n output.progress(` ${key}: ${chalk.cyan(String(value))}`);\n }\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport {\n loadConfig,\n type GlobalConfig,\n type LocalConfig,\n} from '../../lib/guild-config.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\n/**\n * All valid config keys across global and local configs.\n * Note: default_workspace_name is internal (auto-resolved from API).\n */\nconst VALID_GLOBAL_KEYS: (keyof GlobalConfig)[] = [\n 'default_workspace',\n 'default_owner',\n 'debug',\n 'json',\n 'quiet',\n];\n\nconst VALID_LOCAL_KEYS: (keyof LocalConfig)[] = ['agent_id', 'name', 'workspace_id'];\n\nconst ALL_VALID_KEYS = [...VALID_GLOBAL_KEYS, ...VALID_LOCAL_KEYS];\n\nexport function createConfigGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get a configuration value')\n .argument('<key>', `Config key (${ALL_VALID_KEYS.join(', ')})`)\n .action(async (key: string) => {\n const output = createOutputWriter();\n const config = await loadConfig();\n const jsonMode = isMachineReadable();\n\n if (!ALL_VALID_KEYS.includes(key as keyof GlobalConfig | keyof LocalConfig)) {\n output.error(\n `Unknown config key: ${key}\\n\\nValid keys:\\n Global: ${VALID_GLOBAL_KEYS.join(', ')}\\n Local: ${VALID_LOCAL_KEYS.join(', ')}`\n );\n process.exit(1);\n }\n\n // Look up in global first, then local\n let value: string | undefined;\n let source: 'global' | 'local' | undefined;\n\n const globalRecord = config.global as Record<string, unknown> | undefined;\n const localRecord = config.local as Record<string, unknown> | undefined;\n\n if (globalRecord && key in globalRecord) {\n value = String(globalRecord[key]);\n source = 'global';\n } else if (localRecord && key in localRecord) {\n value = String(localRecord[key]);\n source = 'local';\n }\n\n if (value === undefined) {\n if (jsonMode) {\n output.data({ key, value: null, source: null });\n } else {\n output.error(`Key not found: ${key}`);\n }\n process.exit(1);\n }\n\n if (jsonMode) {\n output.data({ key, value, source });\n } else {\n output.data(value);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { saveGlobalConfig, type GlobalConfig } from '../../lib/guild-config.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, type OutputWriter } from '../../lib/output.js';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { debug } from '../../lib/errors.js';\nimport { lookupOwner } from '../../lib/owner-helpers.js';\nimport type { Workspace } from '../../lib/api-types.js';\n\n/**\n * Valid keys for global config (~/.guild/config.json).\n * Note: default_workspace_name is internal (auto-resolved from API).\n */\nconst VALID_GLOBAL_KEYS: (keyof GlobalConfig)[] = [\n 'default_workspace',\n 'default_owner',\n 'debug',\n 'json',\n 'quiet',\n];\n\nconst BOOLEAN_KEYS = new Set<keyof GlobalConfig>(['debug', 'json', 'quiet']);\n\nconst TRUTHY = new Set(['true', 'yes', 'on', '1']);\nconst FALSY = new Set(['false', 'no', 'off', '0']);\n\nfunction parseBoolean(value: string, key: string, output: OutputWriter): boolean {\n const lower = value.toLowerCase();\n if (TRUTHY.has(lower)) return true;\n if (FALSY.has(lower)) return false;\n output.error(\n `Invalid boolean value for \"${key}\": \"${value}\"\\n\\nAccepted values: true/false, yes/no, on/off, 1/0`\n );\n process.exit(1);\n}\n\n/**\n * Fetch workspace name by ID from the API.\n * Returns undefined if the lookup fails (not authenticated, not found, etc.).\n */\nasync function resolveWorkspaceName(workspaceId: string): Promise<string | undefined> {\n try {\n const client = new GuildAPIClient();\n const workspace = await client.get<Workspace>(`/workspaces/${workspaceId}`);\n return workspace.name;\n } catch (error: unknown) {\n debug('Could not resolve workspace name for %s: %s', workspaceId, error);\n return undefined;\n }\n}\n\nfunction printResult(\n key: string,\n value: string | boolean,\n jsonMode: boolean,\n output: OutputWriter\n): void {\n if (jsonMode) {\n output.data({ key, value });\n } else {\n output.success(`Set ${chalk.bold(key)} = ${chalk.cyan(String(value))}`);\n }\n}\n\nexport function createConfigSetCommand(): Command {\n const cmd = new Command('set');\n\n cmd\n .description('Set a global configuration value')\n .argument('<key>', `Config key (${VALID_GLOBAL_KEYS.join(', ')})`)\n .argument('<value>', 'Value to set')\n .action(async (key: string, value: string) => {\n const output = createOutputWriter();\n const jsonMode = isMachineReadable();\n\n if (!VALID_GLOBAL_KEYS.includes(key as keyof GlobalConfig)) {\n output.error(\n `Unknown config key: ${key}\\n\\nValid keys:\\n${VALID_GLOBAL_KEYS.map((k) => ` ${k}`).join('\\n')}`\n );\n process.exit(1);\n }\n\n const typedKey = key as keyof GlobalConfig;\n\n if (BOOLEAN_KEYS.has(typedKey)) {\n const boolValue = parseBoolean(value, key, output);\n await saveGlobalConfig({ [typedKey]: boolValue });\n printResult(key, boolValue, jsonMode, output);\n return;\n }\n\n if (typedKey === 'default_workspace') {\n const name = await resolveWorkspaceName(value);\n await saveGlobalConfig({\n default_workspace: value,\n default_workspace_name: name,\n });\n printResult(key, value, jsonMode, output);\n if (name) {\n if (!jsonMode) {\n output.progress(` Workspace name: ${name}`);\n }\n } else {\n if (!jsonMode) {\n output.error('Could not resolve workspace name (not authenticated?)');\n }\n }\n return;\n }\n\n if (typedKey === 'default_owner') {\n let ownerId = value;\n let ownerName: string | undefined;\n try {\n const client = new GuildAPIClient();\n const resolved = await lookupOwner(client, value);\n if (resolved) {\n ownerId = resolved.id;\n ownerName = resolved.name;\n }\n } catch (error: unknown) {\n debug('Could not resolve owner for %s: %s', value, error);\n }\n await saveGlobalConfig({\n default_owner: ownerId,\n default_owner_name: ownerName,\n });\n printResult(key, ownerId, jsonMode, output);\n if (ownerName) {\n if (!jsonMode) {\n output.progress(` Owner name: ${ownerName}`);\n }\n } else {\n if (!jsonMode) {\n output.error('Could not resolve owner name (not authenticated?)');\n }\n }\n return;\n }\n\n await saveGlobalConfig({ [typedKey]: value });\n printResult(key, value, jsonMode, output);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport { getGlobalConfigPath, getLocalConfigPath } from '../../lib/guild-config.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nasync function fileExists(filePath: string): Promise<boolean> {\n return fs\n .access(filePath)\n .then(() => true)\n .catch(() => false);\n}\n\nexport function createConfigPathCommand(): Command {\n const cmd = new Command('path');\n\n cmd.description('Show configuration file paths').action(async () => {\n const output = createOutputWriter();\n const globalPath = getGlobalConfigPath();\n const localPath = getLocalConfigPath();\n const globalExists = await fileExists(globalPath);\n const localExists = await fileExists(localPath);\n\n if (isMachineReadable()) {\n output.data({\n global: { path: globalPath, exists: globalExists },\n local: { path: localPath, exists: localExists },\n });\n return;\n }\n\n const globalStatus = globalExists ? chalk.green('exists') : chalk.dim('not found');\n const localStatus = localExists ? chalk.green('exists') : chalk.dim('not found');\n\n output.progress(`Global: ${globalPath} (${globalStatus})`);\n output.progress(`Local: ${localPath} (${localStatus})`);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { PaginatedResponse, Pagination } from '../../lib/api-types.js';\nimport { Table } from '../../lib/table.js';\n\ninterface Endpoint {\n id: string;\n operation: string;\n method: string;\n path: string;\n tags: string[];\n}\n\ntype EndpointListResponse = PaginatedResponse<Endpoint>;\n\nexport function createCredentialsEndpointListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List endpoints for a credential')\n .argument('<credential-id>', 'Credential ID')\n .option('--include-previous-versions', 'Include endpoints from previous versions')\n .option('--search <query>', 'Search by operation name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (\n credentialId: string,\n options: {\n includePreviousVersions?: boolean;\n search?: string;\n limit: string;\n offset: string;\n }\n ) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n if (options.includePreviousVersions) {\n params.append('include_previous_versions', 'true');\n }\n if (options.search) {\n params.append('search', options.search);\n }\n\n const response = await client.get<EndpointListResponse>(\n `/credentials/${credentialId}/endpoints?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatEndpointsTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n\nfunction formatEndpointsTable(endpoints: Endpoint[], pagination: Pagination): void {\n if (endpoints.length === 0) {\n console.log(chalk.dim('No endpoints found'));\n return;\n }\n\n const table = new Table({\n columns: [\n { name: 'operation', title: 'OPERATION', alignment: 'left' },\n { name: 'method', title: 'METHOD', alignment: 'left' },\n { name: 'path', title: 'PATH', alignment: 'left' },\n { name: 'tags', title: 'TAGS', alignment: 'left' },\n ],\n });\n\n endpoints.forEach((ep) => {\n const methodColor = ep.method === 'DELETE' ? chalk.red : chalk.green;\n\n table.addRow({\n operation: ep.operation,\n method: methodColor(ep.method),\n path: ep.path,\n tags: ep.tags?.join(', ') || '',\n });\n });\n\n table.printTable();\n\n const showing = Math.min(pagination.limit, endpoints.length);\n if (pagination.has_more) {\n const nextOffset = pagination.offset + pagination.limit;\n console.log(\n `\\nShowing ${showing} of ${pagination.total_count} endpoints. ` +\n chalk.dim(`Use --offset ${nextOffset} to see more.`)\n );\n } else if (pagination.total_count > showing) {\n console.log(\n chalk.dim(`\\nShowing ${showing} of ${pagination.total_count} endpoints`)\n );\n }\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatCredentialsTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { CredentialsListResponse } from '../../lib/api-types.js';\n\nexport function createCredentialsListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List credentials for an account')\n .requiredOption('--owner <account>', 'Account name or ID')\n .option('--search <query>', 'Filter by integration name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (options: {\n owner: string;\n search?: string;\n limit: string;\n offset: string;\n }) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const accountId = options.owner;\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n if (options.search) {\n params.append('search', options.search);\n }\n\n const response = await client.get<CredentialsListResponse>(\n `/accounts/${accountId}/credentials?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatCredentialsTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { CredentialsPolicy } from '../../lib/api-types.js';\n\ninterface PolicyCreateOptions {\n decision: string;\n operations?: string;\n workspaces?: string;\n agents?: string;\n resources?: string;\n}\n\nexport function createCredentialsPolicyCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a policy for a credential')\n .argument('<credential-id>', 'Credential ID')\n .requiredOption('--decision <decision>', 'ALLOW or DENY')\n .option('--operations <ops>', 'Comma-separated operation names')\n .option('--workspaces <ids-or-names>', 'Comma-separated workspace IDs or names')\n .option('--agents <ids-or-names>', 'Comma-separated agent IDs or names')\n .option('--resources <json>', 'Resource restrictions as JSON')\n .action(async (credentialId: string, options: PolicyCreateOptions) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const decision = options.decision.toUpperCase();\n if (decision !== 'ALLOW' && decision !== 'DENY') {\n output.error('--decision must be ALLOW or DENY');\n process.exit(1);\n }\n\n const body: Record<string, unknown> = {\n decision,\n };\n\n if (options.operations) {\n body.operations = options.operations.split(',').map((s) => s.trim());\n }\n\n if (options.workspaces) {\n body.workspace_ids_or_names = options.workspaces\n .split(',')\n .map((s) => s.trim());\n }\n\n if (options.agents) {\n body.agent_ids_or_names = options.agents.split(',').map((s) => s.trim());\n }\n\n if (options.resources) {\n try {\n body.resources = JSON.parse(options.resources);\n } catch {\n output.error('--resources must be valid JSON');\n process.exit(1);\n }\n }\n\n const client = new GuildAPIClient();\n const response = await client.post<CredentialsPolicy>(\n `/credentials/${credentialId}/policies`,\n body\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\n\nexport function createCredentialsPolicyDeleteCommand(): Command {\n const cmd = new Command('delete');\n\n cmd\n .description('Delete a credential policy')\n .argument('<policy-id>', 'Policy ID')\n .action(async (policyId: string) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n await client.delete(`/credentials/policies/${policyId}`);\n\n output.success(`Policy ${policyId} deleted`);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatPoliciesTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { CredentialsPolicyListResponse } from '../../lib/api-types.js';\n\nexport function createCredentialsPolicyListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List policies for a credential')\n .argument('<credential-id>', 'Credential ID')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (\n credentialId: string,\n options: {\n limit: string;\n offset: string;\n }\n ) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<CredentialsPolicyListResponse>(\n `/credentials/${credentialId}/policies?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n console.log(JSON.stringify(response, null, 2));\n } else {\n formatPoliciesTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { CredentialsPolicy } from '../../lib/api-types.js';\n\ninterface PolicyUpdateOptions {\n decision: string;\n operations?: string;\n workspaces?: string;\n agents?: string;\n resources?: string;\n}\n\nexport function createCredentialsPolicyUpdateCommand(): Command {\n const cmd = new Command('update');\n\n cmd\n .description('Update a credential policy')\n .argument('<policy-id>', 'Policy ID')\n .requiredOption('--decision <decision>', 'ALLOW or DENY')\n .option('--operations <ops>', 'Comma-separated operation names')\n .option('--workspaces <ids-or-names>', 'Comma-separated workspace IDs or names')\n .option('--agents <ids-or-names>', 'Comma-separated agent IDs or names')\n .option('--resources <json>', 'Resource restrictions as JSON')\n .action(async (policyId: string, options: PolicyUpdateOptions) => {\n const output = createOutputWriter();\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error('Not authenticated. Run: guild auth login');\n process.exit(1);\n }\n\n const decision = options.decision.toUpperCase();\n if (decision !== 'ALLOW' && decision !== 'DENY') {\n output.error('--decision must be ALLOW or DENY');\n process.exit(1);\n }\n\n const body: Record<string, unknown> = {\n decision,\n };\n\n if (options.operations) {\n body.operations = options.operations.split(',').map((s) => s.trim());\n }\n\n if (options.workspaces) {\n body.workspace_ids_or_names = options.workspaces\n .split(',')\n .map((s) => s.trim());\n }\n\n if (options.agents) {\n body.agent_ids_or_names = options.agents.split(',').map((s) => s.trim());\n }\n\n if (options.resources) {\n try {\n body.resources = JSON.parse(options.resources);\n } catch {\n output.error('--resources must be valid JSON');\n process.exit(1);\n }\n }\n\n const client = new GuildAPIClient();\n const response = await client.put<CredentialsPolicy>(\n `/credentials/policies/${policyId}`,\n body\n );\n\n output.data(response);\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(formattedError.details);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport { getAuthToken } from '../lib/auth.js';\nimport { getGuildcoreUrl } from '../lib/config.js';\nimport {\n loadGlobalConfig,\n isAgentDirectory,\n getGlobalConfigPath,\n loadLocalConfig,\n} from '../lib/guild-config.js';\nimport { isMachineReadable } from '../lib/output-mode.js';\nimport { createOutputWriter } from '../lib/output.js';\n\ninterface CheckResult {\n name: string;\n status: 'pass' | 'fail' | 'skip';\n message: string;\n suggestion?: string;\n}\n\nasync function checkAuth(): Promise<CheckResult> {\n const token = await getAuthToken();\n if (token) {\n return { name: 'Authentication', status: 'pass', message: 'Logged in' };\n }\n return {\n name: 'Authentication',\n status: 'fail',\n message: 'Not logged in',\n suggestion: 'Run: guild auth login',\n };\n}\n\nasync function checkServer(): Promise<CheckResult> {\n const url = getGuildcoreUrl();\n const token = await getAuthToken();\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n const start = Date.now();\n try {\n const response = await axios.get(`${url}/me`, {\n timeout: 10000,\n headers,\n validateStatus: () => true,\n });\n const elapsed = Date.now() - start;\n\n if (response.status >= 200 && response.status < 300) {\n return {\n name: 'Server',\n status: 'pass',\n message: `Connected to ${url} (${elapsed}ms)`,\n };\n }\n if (response.status === 401) {\n // Server is up but auth failed \u2014 still a successful connectivity check.\n // checkAuth handles the auth failure separately.\n return {\n name: 'Server',\n status: 'pass',\n message: `Connected to ${url} (${elapsed}ms, auth required)`,\n };\n }\n return {\n name: 'Server',\n status: 'pass',\n message: `Connected to ${url} (${elapsed}ms, HTTP ${response.status})`,\n };\n } catch {\n return {\n name: 'Server',\n status: 'fail',\n message: `Cannot connect to ${url}`,\n suggestion: 'Check your network connection',\n };\n }\n}\n\nasync function checkGlobalConfig(): Promise<CheckResult> {\n const config = await loadGlobalConfig();\n const configPath = getGlobalConfigPath();\n if (config) {\n return {\n name: 'Global config',\n status: 'pass',\n message: configPath.replace(process.env.HOME || '', '~'),\n };\n }\n return {\n name: 'Global config',\n status: 'fail',\n message: 'Not found',\n suggestion: `Expected at ${configPath.replace(process.env.HOME || '', '~')}`,\n };\n}\n\nasync function checkDefaultWorkspace(): Promise<CheckResult> {\n const config = await loadGlobalConfig();\n if (config?.default_workspace) {\n const display = config.default_workspace_name || config.default_workspace;\n return {\n name: 'Default workspace',\n status: 'pass',\n message: display,\n };\n }\n return {\n name: 'Default workspace',\n status: 'fail',\n message: 'Not configured',\n suggestion: 'Run: guild workspace select',\n };\n}\n\nasync function checkLocalConfig(): Promise<CheckResult> {\n const isAgent = await isAgentDirectory();\n if (!isAgent) {\n return {\n name: 'Local config',\n status: 'skip',\n message: 'Not in an agent directory',\n };\n }\n const config = await loadLocalConfig();\n if (config) {\n return {\n name: 'Local config',\n status: 'pass',\n message: `Agent: ${config.name || config.agent_id}`,\n };\n }\n return {\n name: 'Local config',\n status: 'fail',\n message: 'guild.json found but could not be parsed',\n suggestion: 'Check guild.json for valid JSON',\n };\n}\n\nasync function checkConfigFlags(): Promise<CheckResult> {\n const config = await loadGlobalConfig();\n const flags = ['debug', 'json', 'quiet'] as const;\n const enabled = flags.filter((f) => config?.[f] === true);\n if (enabled.length > 0) {\n return {\n name: 'Config flags',\n status: 'pass',\n message: `Enabled: ${enabled.join(', ')}`,\n };\n }\n return {\n name: 'Config flags',\n status: 'skip',\n message: 'No persistent flags set',\n };\n}\n\nasync function checkGit(): Promise<CheckResult> {\n const isAgent = await isAgentDirectory();\n if (!isAgent) {\n return {\n name: 'Git',\n status: 'skip',\n message: 'Not in an agent directory',\n };\n }\n\n try {\n const { execa } = await import('execa');\n await execa('git', ['--version']);\n\n // Check for remote\n const { stdout } = await execa('git', ['remote', '-v'], { reject: false });\n if (stdout && stdout.includes('origin')) {\n return { name: 'Git', status: 'pass', message: 'Installed, remote configured' };\n }\n return {\n name: 'Git',\n status: 'fail',\n message: 'Installed but no remote configured',\n suggestion: 'Run: git remote add origin <url>',\n };\n } catch {\n return {\n name: 'Git',\n status: 'fail',\n message: 'Git not found',\n suggestion: 'Install git: https://git-scm.com',\n };\n }\n}\n\nexport function createDoctorCommand(): Command {\n const cmd = new Command('doctor');\n\n cmd.description('Check CLI setup and diagnose issues').action(async () => {\n const output = createOutputWriter();\n const jsonMode = isMachineReadable();\n const checks: CheckResult[] = [];\n\n if (!jsonMode) {\n output.progress('\\nChecking Guild CLI setup...\\n');\n }\n\n const runners = [\n checkAuth,\n checkServer,\n checkGlobalConfig,\n checkDefaultWorkspace,\n checkConfigFlags,\n checkLocalConfig,\n checkGit,\n ];\n\n for (const runner of runners) {\n const result = await runner();\n checks.push(result);\n\n if (!jsonMode) {\n const icon =\n result.status === 'pass'\n ? chalk.green('\u2713')\n : result.status === 'fail'\n ? chalk.red('\u2717')\n : chalk.dim('-');\n const nameCol = result.name.padEnd(20);\n output.progress(` ${icon} ${chalk.bold(nameCol)} ${result.message}`);\n if (result.suggestion) {\n output.progress(` ${chalk.dim(result.suggestion)}`);\n output.progress('');\n }\n }\n }\n\n const passed = checks.filter((c) => c.status === 'pass').length;\n const failed = checks.filter((c) => c.status === 'fail').length;\n const skipped = checks.filter((c) => c.status === 'skip').length;\n\n if (jsonMode) {\n output.data({ checks, passed, failed, skipped });\n } else {\n output.progress('');\n const parts: string[] = [];\n if (passed > 0) parts.push(chalk.green(`${passed} passed`));\n if (failed > 0) parts.push(chalk.red(`${failed} failed`));\n if (skipped > 0) parts.push(chalk.dim(`${skipped} skipped`));\n output.progress(parts.join(', '));\n }\n\n process.exit(failed > 0 ? 1 : 0);\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { createOutputWriter } from '../lib/output.js';\n\n// Resolve the CLI package root \u2014 always one level above dist/\nconst packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\nconst docsDir = path.join(packageRoot, 'docs');\n\ninterface SkillFile {\n src: string;\n dest: string;\n label: string;\n}\n\nconst CLAUDE_SKILL_FILES: SkillFile[] = [\n {\n src: path.join(docsDir, 'skills', 'agent-dev.md'),\n dest: path.join('.claude', 'skills', 'agent-dev', 'skill.md'),\n label: '.claude/skills/agent-dev/skill.md',\n },\n {\n src: path.join(docsDir, 'CLI_WORKFLOW.md'),\n dest: path.join('.claude', 'skills', 'guild-cli-workflow', 'skill.md'),\n label: '.claude/skills/guild-cli-workflow/skill.md',\n },\n {\n src: path.join(docsDir, 'skills', 'integrations.md'),\n dest: path.join('.claude', 'skills', 'integrations', 'skill.md'),\n label: '.claude/skills/integrations/skill.md',\n },\n];\n\nconst CODEX_SKILL_FILES: SkillFile[] = [\n {\n src: path.join(docsDir, 'skills', 'codex-agent-dev.md'),\n dest: path.join('.agents', 'skills', 'guild-agent-dev', 'SKILL.md'),\n label: '.agents/skills/guild-agent-dev/SKILL.md',\n },\n];\n\nconst CLAUDE_MD_TEMPLATE = `# CLAUDE.md\n\n## Agent Development\n\nThis project uses Guild for agent development. Development skills and patterns are installed in \\`.claude/skills/\\`.\n\n### Quick Start\n\n\\`\\`\\`bash\nguild agent init --name my-agent --template LLM\nguild agent save --message \"Initial version\" --wait --publish\n\\`\\`\\`\n\nSee \\`.claude/skills/agent-dev/skill.md\\` for SDK reference, patterns, and anti-hallucination guide.\n`;\n\nconst AGENTS_MD_TEMPLATE = `# AGENTS.md\n\n## Guild Agent Development\n\nThis project uses Guild for agent development. Codex instructions are installed in \\`.agents/skills/guild-agent-dev/SKILL.md\\`.\n\n### Quick Start\n\n\\`\\`\\`bash\nguild agent init --name my-agent --template LLM\nguild agent test --ephemeral\nguild agent save -A --message \"Initial version\"\n\\`\\`\\`\n\nUse \\`guild doctor\\` to check authentication, server connectivity, workspace selection, and git setup.\n`;\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nconst MCP_SERVER_CONFIG = {\n command: 'guild',\n args: ['mcp'],\n};\n\ninterface McpConfig {\n mcpServers?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nasync function setupMcp(\n targetDir: string,\n options: { force: boolean }\n): Promise<'created' | 'skipped'> {\n const output = createOutputWriter();\n const mcpPath = path.join(targetDir, '.mcp.json');\n\n let existing: McpConfig = {};\n const exists = await fileExists(mcpPath);\n\n if (exists) {\n const content = await fs.readFile(mcpPath, 'utf-8');\n existing = JSON.parse(content) as McpConfig;\n\n if (existing.mcpServers && 'guild' in existing.mcpServers && !options.force) {\n output.progress('.mcp.json already has Guild server (use --force to overwrite)');\n return 'skipped';\n }\n }\n\n const updated: McpConfig = {\n ...existing,\n mcpServers: {\n ...(existing.mcpServers ?? {}),\n guild: MCP_SERVER_CONFIG,\n },\n };\n\n await fs.writeFile(mcpPath, JSON.stringify(updated, null, 2) + '\\n', 'utf-8');\n\n if (exists) {\n output.success('Added Guild MCP server to .mcp.json');\n } else {\n output.success('Created .mcp.json with Guild MCP server');\n }\n return 'created';\n}\n\n/**\n * Run setup in a target directory. Exported so init/clone can call it.\n * When called with `quiet: true`, suppresses progress output (used as a\n * post-init/clone step where the caller handles its own progress UI).\n */\nexport async function runSetup(\n targetDir: string,\n options: {\n force?: boolean;\n claudeMd?: boolean;\n codex?: boolean;\n agentsMd?: boolean;\n mcp?: boolean;\n quiet?: boolean;\n } = {}\n): Promise<{ filesCreated: number; filesSkipped: number }> {\n const output = createOutputWriter();\n const force = options.force ?? false;\n const claudeMd = options.claudeMd ?? false;\n const codex = options.codex ?? false;\n const agentsMd = options.agentsMd ?? false;\n const mcp = options.mcp ?? true;\n const quiet = options.quiet ?? false;\n\n if (agentsMd && !codex) {\n output.error(\n '--agents-md requires --codex',\n 'Create Codex setup files with:\\n guild setup --codex --agents-md'\n );\n process.exit(1);\n }\n\n if (claudeMd && codex) {\n output.error(\n '--claude-md cannot be used with --codex',\n 'Create Claude setup with:\\n guild setup --claude-md\\n\\nCreate Codex setup with:\\n guild setup --codex --agents-md'\n );\n process.exit(1);\n }\n\n const skillFiles = codex ? CODEX_SKILL_FILES : CLAUDE_SKILL_FILES;\n\n // Verify source docs exist\n for (const file of skillFiles) {\n if (!(await fileExists(file.src))) {\n if (!quiet) {\n output.error(\n 'Could not find Guild CLI docs. Reinstall the CLI: npm install -g @guildai/cli'\n );\n }\n return { filesCreated: 0, filesSkipped: 0 };\n }\n }\n\n if (!quiet) {\n output.progress('Setting up Guild CLI skills...');\n output.progress('');\n }\n\n let filesCreated = 0;\n let filesSkipped = 0;\n let codexProjectFilesChanged = false;\n\n // Copy skill files\n for (const file of skillFiles) {\n const destPath = path.join(targetDir, file.dest);\n const exists = await fileExists(destPath);\n\n if (exists && !force) {\n if (!quiet) {\n output.progress(`${file.label} already exists (use --force to overwrite)`);\n }\n filesSkipped++;\n } else {\n await fs.mkdir(path.dirname(destPath), { recursive: true });\n await fs.copyFile(file.src, destPath);\n if (!quiet) {\n if (exists) {\n output.success(`Updated ${file.label}`);\n } else {\n output.success(`Created ${file.label}`);\n }\n }\n filesCreated++;\n if (codex) {\n codexProjectFilesChanged = true;\n }\n }\n }\n\n // Handle MCP config\n if (mcp) {\n const result = await setupMcp(targetDir, { force });\n if (result === 'created') {\n filesCreated++;\n } else {\n filesSkipped++;\n }\n }\n\n // Handle CLAUDE.md template\n if (claudeMd) {\n const claudeMdPath = path.join(targetDir, 'CLAUDE.md');\n const exists = await fileExists(claudeMdPath);\n\n if (exists) {\n if (!quiet) {\n output.progress('CLAUDE.md already exists (not overwriting)');\n }\n filesSkipped++;\n } else {\n await fs.writeFile(claudeMdPath, CLAUDE_MD_TEMPLATE, 'utf-8');\n if (!quiet) {\n output.success('Created CLAUDE.md');\n }\n filesCreated++;\n }\n }\n\n // Handle AGENTS.md template for Codex setup\n if (agentsMd) {\n const agentsMdPath = path.join(targetDir, 'AGENTS.md');\n const exists = await fileExists(agentsMdPath);\n\n if (exists) {\n if (!quiet) {\n output.progress('AGENTS.md already exists (not overwriting)');\n }\n filesSkipped++;\n } else {\n await fs.writeFile(agentsMdPath, AGENTS_MD_TEMPLATE, 'utf-8');\n if (!quiet) {\n output.success('Created AGENTS.md');\n }\n filesCreated++;\n codexProjectFilesChanged = true;\n }\n }\n\n // Summary (only in standalone mode)\n if (!quiet) {\n output.progress('');\n if (filesCreated > 0 && filesSkipped === 0) {\n if (force) {\n output.success('Guild CLI skills updated.');\n } else {\n output.success(\n 'Guild CLI skills installed. Your coding assistant can now drive agent development.'\n );\n }\n } else if (filesCreated === 0) {\n output.progress(\n 'No files were modified. Use --force to overwrite existing files.'\n );\n } else {\n output.success('Guild CLI skills installed.');\n }\n\n if (codexProjectFilesChanged) {\n output.progress('Restart Codex to pick up the new project instructions.');\n }\n }\n\n return { filesCreated, filesSkipped };\n}\n\nexport function createSetupCommand(): Command {\n const cmd = new Command('setup');\n\n cmd\n .description(\n 'Set up Guild CLI skills for coding assistants (Claude Code, Codex, etc.)'\n )\n .option('--force', 'Overwrite existing skill files and Guild MCP config', false)\n .option('--codex', 'Install Codex skill files instead of Claude Code skills', false)\n .option(\n '--claude-md',\n 'Also create a CLAUDE.md template in the project root',\n false\n )\n .option(\n '--agents-md',\n 'With --codex, also create an AGENTS.md template in the project root',\n false\n )\n .option('--no-mcp', 'Skip MCP server configuration')\n .action(\n async (options: {\n force: boolean;\n claudeMd: boolean;\n codex: boolean;\n agentsMd: boolean;\n mcp: boolean;\n }) => {\n await runSetup(process.cwd(), options);\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\n\nexport function createMcpCommand(): Command {\n const cmd = new Command('mcp');\n\n cmd\n .description(\n 'Start an MCP server over stdio for use with Claude Code, Cursor, and other MCP hosts'\n )\n .option(\n '--workspace <id>',\n 'Workspace ID or name (defaults to configured workspace)'\n )\n .option('--debug', 'Enable debug logging to stderr')\n .addHelpText(\n 'after',\n `\nConfiguration:\n\n Add to .mcp.json in your project root:\n {\n \"mcpServers\": {\n \"guild\": {\n \"command\": \"guild\",\n \"args\": [\"mcp\"]\n }\n }\n }\n\n Or run: guild setup --mcp\n`\n )\n .action(async (options: { workspace?: string; debug?: boolean }) => {\n const { startMcpServer } = await import('../mcp/server.js');\n await startMcpServer({\n workspace: options.workspace,\n debug: options.debug,\n });\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatIntegrationTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { IntegrationListResponse } from '../../lib/api-types.js';\n\nconst SORT_MAP: Record<string, string> = {\n updated: 'updated_at',\n newest: 'created_at',\n name: 'name',\n};\n\nexport function createIntegrationListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List integrations')\n .option('--search <query>', 'Search integrations by name or description')\n .option(\n '--sort <field>',\n 'Sort by: updated, newest, name (default: updated)',\n 'updated'\n )\n .option('--published', 'Only show integrations with at least one published version')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (options: {\n search?: string;\n sort: string;\n published?: boolean;\n limit: string;\n offset: string;\n }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n if (options.search) {\n params.append('search', options.search);\n }\n if (options.published) {\n params.append('published_only', 'true');\n }\n\n const sortField = SORT_MAP[options.sort];\n if (sortField) {\n params.append('sort_by', sortField);\n }\n\n const response = await client.get<IntegrationListResponse>(\n `/integrations?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatIntegrationTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list integrations: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Integration } from '../../lib/api-types.js';\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\nfunction formatIntegrationDetails(integration: Integration): void {\n console.log(chalk.bold(integration.name));\n console.log();\n\n console.log(\n ` ${'Description'.padEnd(15)}${integration.description || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Visibility'.padEnd(15)}${integration.is_public ? 'public' : 'internal'}`\n );\n console.log(` ${'Owner'.padEnd(15)}${integration.owner?.name || chalk.dim('\u2014')}`);\n console.log(` ${'Created'.padEnd(15)}${formatDate(integration.created_at)}`);\n console.log(` ${'Last Updated'.padEnd(15)}${formatDate(integration.updated_at)}`);\n\n console.log();\n console.log(chalk.bold('Protocol'));\n console.log(` ${'Type'.padEnd(15)}${integration.protocol_config.protocol}`);\n console.log(` ${'Base URL'.padEnd(15)}${integration.protocol_config.base_url}`);\n\n console.log();\n console.log(chalk.bold('Authentication'));\n const scheme =\n integration.auth_config.auth_scheme === 'API_KEY' ? 'API Key' : 'OAuth 2.0';\n console.log(` ${'Scheme'.padEnd(15)}${scheme}`);\n if (integration.auth_config.token_header_template) {\n console.log(\n ` ${'Header'.padEnd(15)}${integration.auth_config.token_header_template}`\n );\n }\n if (integration.auth_config.install_url) {\n console.log(` ${'Install URL'.padEnd(15)}${integration.auth_config.install_url}`);\n }\n if (integration.auth_config.token_url) {\n console.log(` ${'Token URL'.padEnd(15)}${integration.auth_config.token_url}`);\n }\n\n console.log();\n if (integration.webhook_config) {\n console.log(\n `${'Webhooks'.padEnd(17)}${integration.webhook_config.enabled ? 'Enabled' : 'Disabled'}`\n );\n if (integration.webhook_config.events?.length) {\n console.log(\n ` ${'Events'.padEnd(15)}${integration.webhook_config.events.join(', ')}`\n );\n }\n } else {\n console.log(`${'Webhooks'.padEnd(17)}${chalk.dim('Not configured')}`);\n }\n\n console.log();\n console.log(chalk.bold('Latest Published Version'));\n if (integration.latest_published_version) {\n const v = integration.latest_published_version;\n console.log(` ${'Version'.padEnd(15)}${v.version_number}`);\n console.log(` ${'Published'.padEnd(15)}${formatDate(v.published_at)}`);\n } else {\n console.log(` ${chalk.dim('None')}`);\n }\n}\n\nexport function createIntegrationGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get integration details')\n .argument('<id_or_name>', 'Integration ID or name (e.g., owner~name)')\n .action(async (identifier: string) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.get<Integration>(`/integrations/${identifier}`);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatIntegrationDetails(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get integration: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { resolveOwnerId } from '../../lib/owner-helpers.js';\nimport { isInteractive } from '../../lib/stdin.js';\nimport type { Integration } from '../../lib/api-types.js';\n\ninterface CreateOptions {\n description?: string;\n baseUrl?: string;\n owner?: string;\n public?: boolean;\n authScheme?: string;\n headerTemplate?: string;\n installUrl?: string;\n tokenUrl?: string;\n clientId?: string;\n clientSecret?: string;\n scopes?: string;\n tokenContentType?: string;\n webhookEvents?: string;\n}\n\ninterface AuthConfig {\n auth_scheme: 'API_KEY' | 'OAUTH';\n token_header_template?: string;\n install_url?: string;\n token_url?: string;\n token_url_content_type?: string;\n client_id?: string;\n client_secret?: string;\n scopes?: string[];\n}\n\nfunction formatCreatedIntegration(integration: Integration): void {\n console.log(chalk.green('Integration created successfully'));\n console.log();\n console.log(` ${'Name'.padEnd(15)}${integration.name}`);\n console.log(\n ` ${'Description'.padEnd(15)}${integration.description || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Visibility'.padEnd(15)}${integration.is_public ? 'public' : 'internal'}`\n );\n console.log(` ${'Owner'.padEnd(15)}${integration.owner?.name || chalk.dim('\u2014')}`);\n console.log(` ${'Base URL'.padEnd(15)}${integration.protocol_config.base_url}`);\n const scheme =\n integration.auth_config.auth_scheme === 'API_KEY' ? 'API Key' : 'OAuth 2.0';\n console.log(` ${'Auth Scheme'.padEnd(15)}${scheme}`);\n if (integration.auth_config.token_header_template) {\n console.log(\n ` ${'Header'.padEnd(15)}${integration.auth_config.token_header_template}`\n );\n }\n if (integration.webhook_config) {\n console.log(` ${'Webhooks'.padEnd(15)}Enabled`);\n } else {\n console.log(` ${'Webhooks'.padEnd(15)}${chalk.dim('Not configured')}`);\n }\n}\n\nexport function createIntegrationCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new integration')\n .argument('<name>', 'Integration name')\n .option('--description <text>', 'What this integration does')\n .option('--base-url <url>', 'Base URL for all API requests')\n .option('--owner <account>', 'Owner account name or ID (default: current user)')\n .option('--public', 'Make this integration visible to all users')\n .option('--auth-scheme <scheme>', 'Authentication scheme: api-key or oauth')\n .option(\n '--header-template <template>',\n 'Header template for API Key auth (default: \"X-API-Key: {token}\")'\n )\n .option('--install-url <url>', 'OAuth authorization endpoint')\n .option('--token-url <url>', 'OAuth token exchange endpoint')\n .option('--client-id <id>', 'OAuth client ID')\n .option('--client-secret <secret>', 'OAuth client secret')\n .option('--scopes <scopes>', 'Comma-separated OAuth scopes')\n .option('--token-content-type <type>', 'Content-Type for OAuth token request')\n .option('--webhook-events <events>', 'Enable webhooks with events as JSON')\n .action(async (name: string, options: CreateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const interactive = isInteractive();\n\n // Resolve owner\n const owner = await resolveOwnerId({\n ownerFlag: options.owner,\n client,\n interactive,\n });\n\n // Resolve description\n let description = options.description;\n if (!description && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n { type: 'input', name: 'description', message: 'Description:' },\n ]);\n description = answer.description;\n }\n\n // Resolve base URL\n let baseUrl = options.baseUrl;\n if (!baseUrl && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n { type: 'input', name: 'baseUrl', message: 'Base URL:' },\n ]);\n baseUrl = answer.baseUrl;\n }\n\n // Resolve auth scheme\n let authScheme = options.authScheme;\n if (!authScheme && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'list',\n name: 'authScheme',\n message: 'Select authentication scheme:',\n choices: [\n {\n name: 'API Key - Static token sent in request headers',\n value: 'api-key',\n },\n {\n name: 'OAuth 2.0 - User grants access via authorization flow',\n value: 'oauth',\n },\n ],\n },\n ]);\n authScheme = answer.authScheme;\n }\n\n // Validate required fields in non-interactive mode\n const missing: string[] = [];\n if (!description) missing.push('--description <text>');\n if (!baseUrl) missing.push('--base-url <url>');\n if (!authScheme) missing.push('--auth-scheme <scheme>');\n\n if (missing.length > 0) {\n output.error(\n `Error: The following options are required in non-interactive mode:\\n ${missing.join('\\n ')}`,\n 'Provide all required options, or run interactively (in a TTY) to be prompted.'\n );\n process.exit(1);\n }\n\n // Build auth config\n let authConfig: AuthConfig;\n const normalizedScheme = (authScheme as string).toLowerCase();\n\n if (normalizedScheme === 'api-key') {\n let headerTemplate = options.headerTemplate || 'X-API-Key: {token}';\n\n if (interactive && !options.headerTemplate) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'headerTemplate',\n message: 'Header template:',\n default: 'X-API-Key: {token}',\n },\n ]);\n headerTemplate = answer.headerTemplate;\n }\n\n if (!headerTemplate.includes('{token}')) {\n output.error('Error: --header-template must contain {token} placeholder');\n process.exit(1);\n }\n\n authConfig = {\n auth_scheme: 'API_KEY',\n token_header_template: headerTemplate,\n };\n } else if (normalizedScheme === 'oauth') {\n let installUrl = options.installUrl;\n let tokenUrl = options.tokenUrl;\n let clientId = options.clientId;\n let clientSecret = options.clientSecret;\n\n if (interactive) {\n const { default: inquirer } = await import('inquirer');\n if (!installUrl) {\n const a = await inquirer.prompt([\n { type: 'input', name: 'val', message: 'Install URL:' },\n ]);\n installUrl = a.val;\n }\n if (!tokenUrl) {\n const a = await inquirer.prompt([\n { type: 'input', name: 'val', message: 'Token URL:' },\n ]);\n tokenUrl = a.val;\n }\n if (!clientId) {\n const a = await inquirer.prompt([\n { type: 'input', name: 'val', message: 'Client ID:' },\n ]);\n clientId = a.val;\n }\n if (!clientSecret) {\n const a = await inquirer.prompt([\n {\n type: 'password',\n name: 'val',\n message: 'Client Secret:',\n },\n ]);\n clientSecret = a.val;\n }\n }\n\n const oauthMissing: string[] = [];\n if (!installUrl) oauthMissing.push('--install-url');\n if (!tokenUrl) oauthMissing.push('--token-url');\n if (!clientId) oauthMissing.push('--client-id');\n if (!clientSecret) oauthMissing.push('--client-secret');\n\n if (oauthMissing.length > 0) {\n output.error(\n `Error: ${oauthMissing.join(', ')}, and --client-secret are required when --auth-scheme is oauth`\n );\n process.exit(1);\n }\n\n authConfig = {\n auth_scheme: 'OAUTH',\n install_url: installUrl,\n token_url: tokenUrl,\n client_id: clientId,\n client_secret: clientSecret,\n token_url_content_type:\n options.tokenContentType || 'application/x-www-form-urlencoded',\n };\n\n if (options.scopes) {\n authConfig.scopes = options.scopes.split(',').map((s) => s.trim());\n } else if (interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'scopes',\n message: 'Scopes (comma-separated, optional):',\n },\n ]);\n if (answer.scopes) {\n authConfig.scopes = answer.scopes\n .split(',')\n .map((s: string) => s.trim())\n .filter(Boolean);\n }\n }\n } else {\n output.error(\n `Error: Invalid auth scheme '${authScheme}'`,\n 'Valid schemes: api-key, oauth'\n );\n process.exit(1);\n }\n\n // Build webhook config\n let webhookConfig: { events: Record<string, string[]> } | undefined;\n if (options.webhookEvents) {\n try {\n const events = JSON.parse(options.webhookEvents) as Record<\n string,\n string[]\n >;\n webhookConfig = { events };\n } catch {\n output.error(\n `Error: Invalid JSON for --webhook-events: ${options.webhookEvents}`\n );\n process.exit(1);\n }\n } else if (interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'configureWebhooks',\n message: 'Configure webhooks?',\n default: false,\n },\n ]);\n if (answer.configureWebhooks) {\n const eventsAnswer = await inquirer.prompt([\n {\n type: 'input',\n name: 'events',\n message: 'Webhook events (JSON):',\n },\n ]);\n if (eventsAnswer.events) {\n try {\n const events = JSON.parse(eventsAnswer.events) as Record<\n string,\n string[]\n >;\n webhookConfig = { events };\n } catch {\n output.error('Error: Invalid JSON for webhook events');\n process.exit(1);\n }\n }\n }\n }\n\n // Build request body\n const body: Record<string, unknown> = {\n name,\n description: description as string,\n is_public: options.public || false,\n protocol_config: {\n protocol: 'REST',\n base_url: baseUrl as string,\n },\n auth_config: authConfig,\n };\n\n if (webhookConfig) {\n body.webhook_config = webhookConfig;\n }\n\n const response = await client.post<Integration>(\n `/accounts/${owner.name}/integrations`,\n body\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatCreatedIntegration(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create integration: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Integration } from '../../lib/api-types.js';\n\ninterface UpdateOptions {\n description?: string;\n baseUrl?: string;\n public?: boolean;\n headerTemplate?: string;\n installUrl?: string;\n tokenUrl?: string;\n tokenContentType?: string;\n clientSecret?: string;\n webhookEvents?: string;\n}\n\nfunction formatUpdatedIntegration(integration: Integration): void {\n console.log(chalk.green('Integration updated successfully'));\n console.log();\n console.log(` ${'Name'.padEnd(15)}${integration.name}`);\n console.log(\n ` ${'Description'.padEnd(15)}${integration.description || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Visibility'.padEnd(15)}${integration.is_public ? 'public' : 'internal'}`\n );\n console.log(` ${'Owner'.padEnd(15)}${integration.owner?.name || chalk.dim('\u2014')}`);\n console.log(` ${'Base URL'.padEnd(15)}${integration.protocol_config.base_url}`);\n const scheme =\n integration.auth_config.auth_scheme === 'API_KEY' ? 'API Key' : 'OAuth 2.0';\n console.log(` ${'Auth Scheme'.padEnd(15)}${scheme}`);\n if (integration.auth_config.token_header_template) {\n console.log(\n ` ${'Header'.padEnd(15)}${integration.auth_config.token_header_template}`\n );\n }\n if (integration.webhook_config) {\n console.log(` ${'Webhooks'.padEnd(15)}Enabled`);\n } else {\n console.log(` ${'Webhooks'.padEnd(15)}${chalk.dim('Not configured')}`);\n }\n}\n\nexport function createIntegrationUpdateCommand(): Command {\n const cmd = new Command('update');\n\n cmd\n .description('Update an integration')\n .argument('<id_or_name>', 'Integration ID or name')\n .option('--description <text>', 'Update description')\n .option('--base-url <url>', 'Update REST base URL')\n .option('--public', 'Make integration public')\n .option('--no-public', 'Make integration private')\n .option('--header-template <template>', 'Update API Key header template')\n .option('--install-url <url>', 'Update OAuth authorization URL')\n .option('--token-url <url>', 'Update OAuth token URL')\n .option('--token-content-type <type>', 'Update OAuth token request content type')\n .option('--client-secret <secret>', 'Update OAuth client secret')\n .option('--webhook-events <events>', 'Update webhook events as JSON')\n .action(async (identifier: string, options: UpdateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Build partial update body\n const body: Record<string, unknown> = {};\n let hasUpdates = false;\n\n if (options.description !== undefined) {\n body.description = options.description;\n hasUpdates = true;\n }\n\n if (options.public !== undefined) {\n body.is_public = options.public;\n hasUpdates = true;\n }\n\n if (options.baseUrl !== undefined) {\n body.protocol_config = { protocol: 'REST', base_url: options.baseUrl };\n hasUpdates = true;\n }\n\n // Auth config updates need the discriminator\n const hasAuthUpdate =\n options.headerTemplate !== undefined ||\n options.installUrl !== undefined ||\n options.tokenUrl !== undefined ||\n options.tokenContentType !== undefined ||\n options.clientSecret !== undefined;\n\n if (hasAuthUpdate) {\n // Fetch integration to determine current auth scheme\n const current = await client.get<Integration>(`/integrations/${identifier}`);\n const scheme = current.auth_config.auth_scheme;\n\n if (scheme === 'API_KEY') {\n const authConfig: Record<string, unknown> = {\n auth_scheme: 'API_KEY',\n };\n if (options.headerTemplate !== undefined) {\n authConfig.token_header_template = options.headerTemplate;\n }\n body.auth_config = authConfig;\n } else {\n const authConfig: Record<string, unknown> = {\n auth_scheme: 'OAUTH',\n };\n if (options.installUrl !== undefined) {\n authConfig.install_url = options.installUrl;\n }\n if (options.tokenUrl !== undefined) {\n authConfig.token_url = options.tokenUrl;\n }\n if (options.tokenContentType !== undefined) {\n authConfig.token_url_content_type = options.tokenContentType;\n }\n if (options.clientSecret !== undefined) {\n authConfig.client_secret = options.clientSecret;\n }\n body.auth_config = authConfig;\n }\n hasUpdates = true;\n }\n\n if (options.webhookEvents !== undefined) {\n try {\n const events = JSON.parse(options.webhookEvents) as Record<\n string,\n string[]\n >;\n body.webhook_config = { events };\n } catch {\n output.error(\n `Error: Invalid JSON for --webhook-events: ${options.webhookEvents}`\n );\n process.exit(1);\n }\n hasUpdates = true;\n }\n\n if (!hasUpdates) {\n output.error(\n 'Error: No update options provided. Use --help to see available options.'\n );\n process.exit(1);\n }\n\n const response = await client.patch<Integration>(\n `/integrations/${identifier}`,\n body\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatUpdatedIntegration(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to update integration: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { isInteractive } from '../../lib/stdin.js';\nimport type { Integration } from '../../lib/api-types.js';\n\ninterface ConnectOptions {\n token?: string;\n owner: string;\n}\n\ninterface ConnectCredentialResponse {\n id: string;\n integration: {\n id: string;\n name: string;\n full_name: string;\n };\n owner_id: string;\n creator: {\n id: string;\n name: string;\n };\n}\n\nexport function createIntegrationConnectCommand(): Command {\n const cmd = new Command('connect');\n\n cmd\n .description('Connect credentials to an integration')\n .argument(\n '<id_or_name>',\n 'Integration ID (UUID) or name in owner~name format (e.g. myorg~my-integration)'\n )\n .option('--token <value>', 'API key value (required in non-interactive mode)')\n .requiredOption(\n '--owner <id_or_name>',\n 'Account to own the credential \u2014 username, org name, or account ID'\n )\n .action(async (identifier: string, options: ConnectOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n if (!options.token && !isInteractive()) {\n output.error('--token is required in non-interactive mode');\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const integration = await client.get<Integration>(\n `/integrations/${identifier}`\n );\n\n if (!integration.auth_config) {\n output.error('This integration has no authentication configured.');\n process.exit(1);\n }\n\n if (integration.auth_config.entity_type !== 'EntIntegrationAuthConfigApiKey') {\n output.error('OAuth integrations must be connected via the dashboard.');\n process.exit(1);\n }\n\n let apiKey = options.token;\n\n if (!apiKey) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n validate: (input: string): boolean | string =>\n input.length > 0 || 'API key cannot be empty',\n },\n ]);\n apiKey = answer.apiKey as string;\n }\n\n const params = new URLSearchParams();\n params.append('auth_config_id', integration.auth_config.id);\n params.append('owner_id', options.owner);\n\n const credential = await client.post<ConnectCredentialResponse>(\n `/credentials/api-key?${params.toString()}`,\n { tokens: { token: apiKey } }\n );\n\n if (isMachineReadable()) {\n output.data(credential);\n } else {\n console.log(chalk.green('Connected to ') + chalk.bold(integration.name));\n console.log();\n console.log(` ${'Credential ID'.padEnd(15)}${credential.id}`);\n console.log(\n ` ${'Integration'.padEnd(15)}${integration.owner.name}~${integration.name}`\n );\n console.log(` ${'Owner'.padEnd(15)}${options.owner}`);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to connect: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport {\n createOutputWriter,\n formatIntegrationVersionTable,\n} from '../../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../../lib/api-types.js';\nimport type { IntegrationVersionListResponse } from '../../../lib/api-types.js';\n\nexport function createIntegrationVersionListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List integration versions')\n .argument('<id_or_name>', 'Integration ID or name')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (identifier: string, options: { limit: string; offset: string }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<IntegrationVersionListResponse>(\n `/integrations/${identifier}/versions?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatIntegrationVersionTable(\n response.items,\n response.pagination,\n identifier\n );\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list versions: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { IntegrationVersion } from '../../../lib/api-types.js';\n\nexport function createIntegrationVersionCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new draft version')\n .argument('<id_or_name>', 'Integration ID or name')\n .action(async (identifier: string) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.post<IntegrationVersion>(\n `/integrations/${identifier}/versions`,\n {}\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n console.log(chalk.green('Version created successfully'));\n console.log();\n console.log(` ${'Version ID'.padEnd(15)}${response.id}`);\n console.log(` ${'Status'.padEnd(15)}Draft`);\n console.log(\n ` ${'Author'.padEnd(15)}${response.author?.name || chalk.dim('\u2014')}`\n );\n console.log(` ${'Created'.padEnd(15)}just now`);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GuildAPIClient } from './api-client.js';\nimport type {\n IntegrationVersion,\n IntegrationVersionListResponse,\n} from './api-types.js';\n\n/**\n * Resolve a version ID from an integration identifier and optional semver.\n *\n * 1. GET /integrations/<identifier> to resolve the integration\n * 2. GET /integrations/<id>/versions to list versions\n * 3. If semver provided, find matching version_number; otherwise use latest (first)\n */\nexport async function resolveVersionId(\n client: GuildAPIClient,\n identifier: string,\n versionNumber?: string\n): Promise<string> {\n const integration = await client.get<{ id: string }>(`/integrations/${identifier}`);\n\n const versions = await client.get<IntegrationVersionListResponse>(\n `/integrations/${integration.id}/versions?limit=100`\n );\n\n if (versions.items.length === 0) {\n throw new Error('No versions found for this integration');\n }\n\n if (versionNumber) {\n const match = versions.items.find((v) => v.version_number === versionNumber);\n if (!match) {\n throw new Error(`Version ${versionNumber} not found`);\n }\n return match.id;\n }\n\n return versions.items[0].id;\n}\n\n/**\n * Resolve the latest draft version ID for an integration.\n * Used by the build command where --version is not applicable (drafts have no semver).\n */\nexport async function resolveLatestDraftId(\n client: GuildAPIClient,\n identifier: string\n): Promise<string> {\n const integration = await client.get<{ id: string }>(`/integrations/${identifier}`);\n\n const versions = await client.get<IntegrationVersionListResponse>(\n `/integrations/${integration.id}/versions?limit=100`\n );\n\n const draft = versions.items.find(\n (v: IntegrationVersion) => v.version_number === null\n );\n\n if (!draft) {\n throw new Error('No draft version found for this integration');\n }\n\n return draft.id;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveVersionId } from '../../../lib/integration-helpers.js';\nimport type { IntegrationVersion } from '../../../lib/api-types.js';\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\nfunction formatValidationStatus(status: string): string {\n switch (status) {\n case 'PASSED':\n return 'Valid';\n case 'FAILED':\n return 'Failed';\n case 'RUNNING':\n return 'Building';\n default:\n return '\u2014';\n }\n}\n\nexport function createIntegrationVersionGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get version details')\n .argument('<id_or_name>', 'Integration ID or name (owner~name)')\n .option('--version-number <semver>', 'Specific version, e.g. 1.0.0')\n .action(async (identifier: string, options: { versionNumber?: string }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const versionId = await resolveVersionId(\n client,\n identifier,\n options.versionNumber\n );\n\n const response = await client.get<IntegrationVersion>(\n `/integration_versions/${versionId}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n const versionDisplay = response.version_number || 'Draft';\n const integrationName = response.integration?.name || identifier;\n console.log(chalk.bold(`${integrationName} - ${versionDisplay}`));\n console.log();\n console.log(\n ` ${'Status'.padEnd(15)}${formatValidationStatus(response.validation_status)}`\n );\n console.log(\n ` ${'Author'.padEnd(15)}${response.author?.name || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Published'.padEnd(15)}${response.published_at ? formatDate(response.published_at) : chalk.dim('\u2014')}`\n );\n console.log(` ${'Created'.padEnd(15)}${formatDate(response.created_at)}`);\n console.log(\n ` ${'Last Updated'.padEnd(15)}${formatDate(response.updated_at)}`\n );\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { createSpinner } from '../../../lib/progress.js';\nimport { resolveLatestDraftId } from '../../../lib/integration-helpers.js';\nimport type { IntegrationVersion } from '../../../lib/api-types.js';\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function createIntegrationVersionBuildCommand(): Command {\n const cmd = new Command('build');\n\n cmd\n .description('Build (validate) a draft version')\n .argument(\n '<id_or_name>',\n 'Integration name (owner~name, defaults to latest draft) or version UUID'\n )\n .requiredOption(\n '--version-number <semver>',\n 'Semantic version number to assign, e.g. 1.0.0'\n )\n .action(async (identifier: string, options: { versionNumber: string }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n // Resolve version ID: UUID directly, or owner~name \u2192 latest draft\n let versionId: string;\n if (UUID_REGEX.test(identifier)) {\n versionId = identifier;\n } else {\n versionId = await resolveLatestDraftId(client, identifier);\n }\n\n const buildResponse = await client.post<{\n version: IntegrationVersion;\n job: { id: string; job_type: string; status: string };\n }>(`/integration_versions/${versionId}/build`, {\n version_number: options.versionNumber,\n });\n\n if (isMachineReadable()) {\n output.data(buildResponse);\n return;\n }\n\n // Poll until build completes\n const spinner = createSpinner(`Building version ${options.versionNumber}...`);\n spinner.start();\n\n const maxAttempts = 60;\n let attempt = 0;\n let finalVersion: IntegrationVersion | null = null;\n\n while (attempt < maxAttempts) {\n await new Promise((r) => setTimeout(r, 3000));\n attempt++;\n\n const version = await client.get<IntegrationVersion>(\n `/integration_versions/${versionId}`\n );\n\n if (\n version.validation_status === 'PASSED' ||\n version.validation_status === 'FAILED'\n ) {\n finalVersion = version;\n break;\n }\n\n spinner.text = `Building version ${options.versionNumber}... (${attempt}/${maxAttempts})`;\n }\n\n if (!finalVersion) {\n spinner.fail('Build timed out');\n process.exit(1);\n }\n\n if (finalVersion.validation_status === 'PASSED') {\n spinner.succeed('Build passed');\n } else {\n spinner.fail('Build failed');\n }\n\n console.log();\n console.log(` ${'Version ID'.padEnd(17)}${finalVersion.id}`);\n console.log(\n ` ${'Version Number'.padEnd(17)}${finalVersion.version_number || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Status'.padEnd(17)}${finalVersion.validation_status === 'PASSED' ? 'Valid' : 'Failed'}`\n );\n\n if (finalVersion.validation_status === 'FAILED') {\n process.exit(1);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to build version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { createSpinner } from '../../../lib/progress.js';\nimport { resolveVersionId } from '../../../lib/integration-helpers.js';\nimport type { IntegrationVersion } from '../../../lib/api-types.js';\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\nexport function createIntegrationVersionPublishCommand(): Command {\n const cmd = new Command('publish');\n\n cmd\n .description('Publish a built version')\n .argument('<id_or_name>', 'Integration ID or name (owner~name)')\n .option('--version-number <semver>', 'Specific version to publish, e.g. 1.0.0')\n .action(async (identifier: string, options: { versionNumber?: string }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const versionId = await resolveVersionId(\n client,\n identifier,\n options.versionNumber\n );\n\n // Get current version info for display\n const currentVersion = await client.get<IntegrationVersion>(\n `/integration_versions/${versionId}`\n );\n const versionDisplay = currentVersion.version_number || versionId;\n\n const publishResponse = await client.post<{\n version: IntegrationVersion;\n job: { id: string; job_type: string; status: string };\n }>(`/integration_versions/${versionId}/publish`, {});\n\n if (isMachineReadable()) {\n output.data(publishResponse);\n return;\n }\n\n // Poll until published\n const spinner = createSpinner(`Publishing version ${versionDisplay}...`);\n spinner.start();\n\n const maxAttempts = 60;\n let attempt = 0;\n let finalVersion: IntegrationVersion | null = null;\n\n while (attempt < maxAttempts) {\n await new Promise((r) => setTimeout(r, 3000));\n attempt++;\n\n const version = await client.get<IntegrationVersion>(\n `/integration_versions/${versionId}`\n );\n\n if (version.published_at) {\n finalVersion = version;\n break;\n }\n\n spinner.text = `Publishing version ${versionDisplay}... (${attempt}/${maxAttempts})`;\n }\n\n if (!finalVersion) {\n spinner.fail('Publish timed out');\n process.exit(1);\n }\n\n spinner.succeed('Version published');\n console.log();\n console.log(` ${'Version ID'.padEnd(17)}${finalVersion.id}`);\n console.log(\n ` ${'Version Number'.padEnd(17)}${finalVersion.version_number || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Published'.padEnd(17)}${formatDate(finalVersion.published_at as string)}`\n );\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to publish version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveVersionId } from '../../../lib/integration-helpers.js';\n\ninterface TestOptions {\n versionNumber?: string;\n operation: string;\n account?: string;\n inputPath?: string;\n inputQuery?: string;\n inputBody?: string;\n}\n\ninterface TestResponse {\n request_url: string;\n status_code: number;\n content_type: string;\n headers: Record<string, string>;\n body: unknown;\n}\n\nfunction parseJsonFlag(value: string, flagName: string): unknown {\n try {\n return JSON.parse(value);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Invalid JSON for ${flagName}: ${msg}`);\n }\n}\n\nexport function createIntegrationVersionTestCommand(): Command {\n const cmd = new Command('test');\n\n cmd\n .description('Test an endpoint invocation')\n .argument('<id_or_name>', 'Integration ID or name (owner~name)')\n .option('--version-number <semver>', 'Specific version, e.g. 1.0.0')\n .requiredOption('--operation <name>', 'Operation to test, e.g. list_users')\n .option('--account <name>', 'Account name to resolve credential from')\n .option('--input-path <json>', 'JSON object of path parameters')\n .option('--input-query <json>', 'JSON object of query parameters')\n .option('--input-body <json>', 'JSON object for request body')\n .action(async (identifier: string, options: TestOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n // Validate JSON inputs before any API calls\n const body: Record<string, unknown> = {\n operation: options.operation,\n };\n\n if (options.inputPath) {\n body.input_path = parseJsonFlag(options.inputPath, '--input-path');\n }\n\n if (options.inputQuery) {\n body.input_query = parseJsonFlag(options.inputQuery, '--input-query');\n }\n\n if (options.inputBody) {\n body.input_body = parseJsonFlag(options.inputBody, '--input-body');\n }\n\n const client = new GuildAPIClient();\n const versionId = await resolveVersionId(\n client,\n identifier,\n options.versionNumber\n );\n\n if (options.account) {\n const creds = await client.get<{\n items: { id: string }[];\n }>(\n `/accounts/${options.account}/credentials?integration=${encodeURIComponent(identifier)}`\n );\n if (creds.items.length === 0) {\n output.error(\n `Error: No credentials found for account '${options.account}' on integration '${identifier}'`\n );\n process.exit(1);\n }\n body.credential_id = creds.items[0].id;\n }\n\n const response = await client.post<TestResponse>(\n `/integration_versions/${versionId}/test`,\n body\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n console.log(`Testing operation: ${options.operation}`);\n console.log();\n console.log(chalk.bold('Request'));\n console.log(` ${'URL'.padEnd(9)}${response.request_url}`);\n console.log();\n console.log(chalk.bold('Response'));\n console.log(` ${'Status'.padEnd(9)}${response.status_code}`);\n console.log(\n ` ${'Type'.padEnd(9)}${response.content_type || chalk.dim('\u2014')}`\n );\n console.log();\n console.log(chalk.bold('Body'));\n if (response.body !== null && response.body !== undefined) {\n const bodyStr =\n typeof response.body === 'string'\n ? response.body\n : JSON.stringify(response.body, null, 2);\n const indented = bodyStr\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n console.log(indented);\n } else {\n console.log(chalk.dim(' (empty)'));\n }\n }\n } catch (error: unknown) {\n if (error instanceof Error && error.message.startsWith('Invalid JSON')) {\n output.error(`Error: ${error.message}`);\n process.exit(1);\n }\n const formattedError = handleAxiosError(error);\n output.error(`Failed to test endpoint: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveVersionId } from '../../../lib/integration-helpers.js';\nimport { Table } from '../../../lib/table.js';\nimport { DEFAULT_PAGE_LIMIT_LARGE } from '../../../lib/api-types.js';\nimport type { Pagination } from '../../../lib/api-types.js';\n\ninterface Operation {\n id: string;\n operation: string;\n method?: string;\n path?: string;\n description?: string;\n summary?: string;\n}\n\ninterface OperationListResponse {\n items: Operation[];\n pagination: Pagination;\n}\n\nexport function createIntegrationOperationListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List operations for an integration version')\n .argument('<id_or_name>', 'Integration ID or name (owner~name)')\n .option('--version-number <semver>', 'Specific version, e.g. 1.0.0')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT_LARGE})`,\n String(DEFAULT_PAGE_LIMIT_LARGE)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (\n identifier: string,\n options: { versionNumber?: string; limit: string; offset: string }\n ) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const versionId = await resolveVersionId(\n client,\n identifier,\n options.versionNumber\n );\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<OperationListResponse>(\n `/integration_versions/${versionId}/endpoints?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n if (response.items.length === 0) {\n console.log(chalk.dim('No operations found'));\n return;\n }\n\n console.log(chalk.bold('Operations'));\n console.log();\n\n const isMcp = response.items.some((ep) => !ep.method);\n const table = new Table({\n columns: isMcp\n ? [\n { name: 'operation', title: 'OPERATION', alignment: 'left' },\n { name: 'description', title: 'DESCRIPTION', alignment: 'left' },\n ]\n : [\n { name: 'operation', title: 'OPERATION', alignment: 'left' },\n {\n name: 'method',\n title: 'METHOD',\n alignment: 'left',\n color: 'cyan',\n },\n { name: 'path', title: 'PATH', alignment: 'left' },\n ],\n });\n\n response.items.forEach((ep) => {\n table.addRow(\n isMcp\n ? { operation: ep.operation, description: ep.description ?? '' }\n : {\n operation: ep.operation,\n method: ep.method ?? '',\n path: ep.path ?? '',\n }\n );\n });\n\n table.printTable();\n\n const showing = Math.min(response.pagination.limit, response.items.length);\n if (response.pagination.has_more) {\n const nextOffset = response.pagination.offset + response.pagination.limit;\n console.log(\n `\\nShowing ${showing} of ${response.pagination.total_count} operations. ` +\n chalk.dim(`Use --offset ${nextOffset} to see more.`)\n );\n } else if (response.pagination.total_count > showing) {\n console.log(\n chalk.dim(\n `\\nShowing ${showing} of ${response.pagination.total_count} operations`\n )\n );\n }\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list operations: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync, existsSync } from 'fs';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { resolveVersionId } from '../../../lib/integration-helpers.js';\nimport { isInteractive } from '../../../lib/stdin.js';\n\ninterface CreateOptions {\n versionNumber?: string;\n operation?: string;\n method?: string;\n path?: string;\n summary?: string;\n tags?: string;\n inputBodySchema?: string;\n outputBodySchema?: string;\n openapi?: string;\n}\n\nconst VALID_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];\n\nexport function createIntegrationOperationCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create operation(s) for an integration version')\n .argument('<id_or_name>', 'Integration ID or name (owner~name)')\n .option('--version-number <semver>', 'Specific version, e.g. 1.0.0')\n .option('--operation <name>', 'Operation identifier, e.g. list_users')\n .option('--method <method>', 'HTTP method: GET, POST, PUT, PATCH, DELETE')\n .option('--path <path>', 'REST path, e.g. /{owner}/{repo}/issues')\n .option('--summary <text>', 'Short description of the operation')\n .option('--tags <tags>', 'Comma-separated tags, e.g. users,admin')\n .option('--input-body-schema <file>', 'Path to JSON file for request body schema')\n .option('--output-body-schema <file>', 'Path to JSON file for response body schema')\n .option('--openapi <file>', 'Path to OpenAPI spec file (YAML or JSON)')\n .action(async (identifier: string, options: CreateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const versionId = await resolveVersionId(\n client,\n identifier,\n options.versionNumber\n );\n\n if (options.openapi) {\n // OpenAPI mode\n if (!existsSync(options.openapi)) {\n output.error(`Error: File not found: ${options.openapi}`);\n process.exit(1);\n }\n\n const content = readFileSync(options.openapi, 'utf-8');\n const response = await client.post<unknown>(\n `/integration_versions/${versionId}/endpoint_generators`,\n { type: 'openapi', content }\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n console.log(chalk.green('OpenAPI operation generation triggered'));\n console.log();\n console.log(\n `Operations will be generated asynchronously. Use 'guild integration operation list ${identifier}' to check results.`\n );\n }\n } else {\n // Individual operation mode \u2014 prompt for missing fields in TTY\n let operation = options.operation;\n let method = options.method;\n let operationPath = options.path;\n\n if (isInteractive()) {\n const { default: inquirer } = await import('inquirer');\n if (!operation) {\n const a = await inquirer.prompt([\n {\n type: 'input',\n name: 'val',\n message: 'Operation name (e.g. list_users):',\n },\n ]);\n operation = a.val;\n }\n if (!method) {\n const a = await inquirer.prompt([\n {\n type: 'list',\n name: 'val',\n message: 'HTTP method:',\n choices: VALID_METHODS,\n },\n ]);\n method = a.val;\n }\n if (!operationPath) {\n const a = await inquirer.prompt([\n { type: 'input', name: 'val', message: 'REST path (e.g. /users):' },\n ]);\n operationPath = a.val;\n }\n }\n\n const missing: string[] = [];\n if (!operation) missing.push('--operation');\n if (!method) missing.push('--method');\n if (!operationPath) missing.push('--path');\n\n if (missing.length > 0) {\n output.error(\n `Error: ${missing.join(', ')} are required when not using --openapi`\n );\n process.exit(1);\n }\n\n method = (method as string).toUpperCase();\n if (!VALID_METHODS.includes(method)) {\n output.error(\n `Error: Invalid HTTP method '${method}'`,\n `Valid methods: ${VALID_METHODS.join(', ')}`\n );\n process.exit(1);\n }\n\n const body: Record<string, unknown> = {\n operation,\n method,\n path: operationPath,\n };\n\n let summary = options.summary;\n if (!summary && isInteractive()) {\n const { default: inquirer } = await import('inquirer');\n const a = await inquirer.prompt([\n { type: 'input', name: 'val', message: 'Summary (optional):' },\n ]);\n if (a.val) summary = a.val;\n }\n\n if (summary) {\n body.summary = summary;\n }\n\n if (options.tags) {\n body.tags = options.tags.split(',').map((t) => t.trim());\n }\n\n if (options.inputBodySchema) {\n if (!existsSync(options.inputBodySchema)) {\n output.error(`Error: File not found: ${options.inputBodySchema}`);\n process.exit(1);\n }\n body.input_body_type = JSON.parse(\n readFileSync(options.inputBodySchema, 'utf-8')\n );\n }\n\n if (options.outputBodySchema) {\n if (!existsSync(options.outputBodySchema)) {\n output.error(`Error: File not found: ${options.outputBodySchema}`);\n process.exit(1);\n }\n body.output_body_type = JSON.parse(\n readFileSync(options.outputBodySchema, 'utf-8')\n );\n }\n\n const response = await client.post<{\n operation: string;\n method: string;\n path: string;\n summary?: string;\n }>(`/integration_versions/${versionId}/endpoints`, body);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n console.log(chalk.green('Operation created successfully'));\n console.log();\n console.log(` ${'Operation'.padEnd(12)}${response.operation}`);\n console.log(` ${'Method'.padEnd(12)}${response.method}`);\n console.log(` ${'Path'.padEnd(12)}${response.path}`);\n if (response.summary) {\n console.log(` ${'Summary'.padEnd(12)}${response.summary}`);\n }\n }\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create operation: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport { resolveOwnerId } from '../../lib/owner-helpers.js';\nimport { isInteractive } from '../../lib/stdin.js';\nimport type { Skill } from '../../lib/api-types.js';\n\ninterface CreateOptions {\n overview?: string;\n owner?: string;\n public?: boolean;\n}\n\nfunction formatCreatedSkill(skill: Skill): void {\n console.log(chalk.green('Skill created successfully'));\n console.log();\n console.log(` ${'Name'.padEnd(15)}${skill.full_name || skill.name}`);\n console.log(` ${'Overview'.padEnd(15)}${skill.overview || chalk.dim('\u2014')}`);\n console.log(` ${'Visibility'.padEnd(15)}${skill.is_public ? 'public' : 'internal'}`);\n console.log(` ${'Owner'.padEnd(15)}${skill.owner?.name || chalk.dim('\u2014')}`);\n}\n\nexport function createSkillCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new skill')\n .argument('<name>', 'Skill name')\n .option('--overview <text>', 'Brief description of what this skill does')\n .option('--owner <account>', 'Owner account name or ID (default: current user)')\n .option('--public', 'Make this skill visible to all users')\n .action(async (name: string, options: CreateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const interactive = isInteractive();\n\n // Resolve owner\n const owner = await resolveOwnerId({\n ownerFlag: options.owner,\n client,\n interactive,\n });\n\n // Resolve overview\n let overview = options.overview;\n if (!overview && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n { type: 'input', name: 'overview', message: 'Overview:' },\n ]);\n overview = answer.overview;\n }\n\n // Validate required fields in non-interactive mode\n if (!overview) {\n output.error(\n 'Error: The following options are required in non-interactive mode:\\n --overview <text>',\n 'Provide all required options, or run interactively (in a TTY) to be prompted.'\n );\n process.exit(1);\n }\n\n const body = {\n name,\n overview,\n is_public: options.public || false,\n owner_id: owner.id,\n };\n\n const response = await client.post<Skill>('/skills', body);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatCreatedSkill(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create skill: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Skill } from '../../lib/api-types.js';\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\nfunction formatSkillDetails(skill: Skill): void {\n console.log(chalk.bold(skill.full_name || skill.name));\n console.log();\n\n console.log(` ${'Overview'.padEnd(15)}${skill.overview || chalk.dim('\u2014')}`);\n console.log(` ${'Visibility'.padEnd(15)}${skill.is_public ? 'public' : 'internal'}`);\n console.log(` ${'Owner'.padEnd(15)}${skill.owner?.name || chalk.dim('\u2014')}`);\n console.log(` ${'Created'.padEnd(15)}${formatDate(skill.created_at)}`);\n console.log(` ${'Last Updated'.padEnd(15)}${formatDate(skill.updated_at)}`);\n\n console.log();\n console.log(chalk.bold('Latest Version'));\n if (skill.latest_version) {\n const v = skill.latest_version;\n console.log(` ${'Version'.padEnd(15)}${v.version_number}`);\n console.log(` ${'Description'.padEnd(15)}${v.description || chalk.dim('\u2014')}`);\n } else {\n console.log(` ${chalk.dim('None')}`);\n }\n}\n\nexport function createSkillGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get skill details')\n .argument('<identifier>', 'Skill ID or full name (e.g., \"myorg~tone-guide\")')\n .action(async (identifier: string) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.get<Skill>(`/skills/${identifier}`);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatSkillDetails(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get skill: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter, formatSkillTable } from '../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../lib/api-types.js';\nimport type { SkillListResponse } from '../../lib/api-types.js';\n\nconst SORT_MAP: Record<string, string> = {\n updated: 'updated_at',\n newest: 'created_at',\n name: 'name',\n};\n\nexport function createSkillListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List skills')\n .option('--search <query>', 'Search skills by name or overview')\n .option(\n '--sort <field>',\n 'Sort by: name, updated, newest (default: \"name\")',\n 'name'\n )\n .option('--owner <id>', 'Filter by owner account ID')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(\n async (options: {\n search?: string;\n sort: string;\n owner?: string;\n limit: string;\n offset: string;\n }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n if (options.search) {\n params.append('search', options.search);\n }\n if (options.owner) {\n params.append('owner_id', options.owner);\n }\n\n const sortField = SORT_MAP[options.sort];\n if (sortField) {\n params.append('sort_by', sortField);\n }\n\n const response = await client.get<SkillListResponse>(\n `/skills?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatSkillTable(response.items, response.pagination);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list skills: ${formattedError.details}`);\n process.exit(1);\n }\n }\n );\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../lib/api-client.js';\nimport { getAuthToken } from '../../lib/auth.js';\nimport { handleAxiosError } from '../../lib/errors.js';\nimport { isMachineReadable } from '../../lib/output-mode.js';\nimport { createOutputWriter } from '../../lib/output.js';\nimport type { Skill } from '../../lib/api-types.js';\n\ninterface UpdateOptions {\n overview?: string;\n public?: boolean;\n}\n\nfunction formatUpdatedSkill(skill: Skill): void {\n console.log(chalk.green('Skill updated successfully'));\n console.log();\n console.log(` ${'Name'.padEnd(15)}${skill.full_name || skill.name}`);\n console.log(` ${'Overview'.padEnd(15)}${skill.overview || chalk.dim('\u2014')}`);\n console.log(` ${'Visibility'.padEnd(15)}${skill.is_public ? 'public' : 'internal'}`);\n console.log(` ${'Owner'.padEnd(15)}${skill.owner?.name || chalk.dim('\u2014')}`);\n}\n\nexport function createSkillUpdateCommand(): Command {\n const cmd = new Command('update');\n\n cmd\n .description('Update a skill')\n .argument('<identifier>', 'Skill ID or full name (e.g., \"myorg~tone-guide\")')\n .option('--overview <text>', 'Update the skill overview')\n .option('--public', 'Make this skill visible to all users')\n .option('--no-public', 'Make this skill private')\n .action(async (identifier: string, options: UpdateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const body: Record<string, unknown> = {};\n let hasUpdates = false;\n\n if (options.overview !== undefined) {\n body.overview = options.overview;\n hasUpdates = true;\n }\n\n if (options.public !== undefined) {\n body.is_public = options.public;\n hasUpdates = true;\n }\n\n if (!hasUpdates) {\n output.error(\n 'Error: No update options provided. Use --help to see available options.'\n );\n process.exit(1);\n }\n\n const response = await client.patch<Skill>(`/skills/${identifier}`, body);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatUpdatedSkill(response);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to update skill: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { readFile } from 'node:fs/promises';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport { isInteractive } from '../../../lib/stdin.js';\nimport type { SkillVersion } from '../../../lib/api-types.js';\n\ninterface CreateOptions {\n versionNumber?: string;\n description?: string;\n body?: string;\n bodyFile?: string;\n}\n\nexport function createSkillVersionCreateCommand(): Command {\n const cmd = new Command('create');\n\n cmd\n .description('Create a new skill version')\n .argument('<identifier>', 'Skill ID or full name (e.g., \"myorg~tone-guide\")')\n .option('--version-number <semver>', 'Semantic version number (e.g., \"1.0.0\")')\n .option('--description <text>', 'Brief description of this version')\n .option('--body <text>', 'Markdown body content of the skill')\n .option('--body-file <path>', 'Read body content from a file')\n .action(async (identifier: string, options: CreateOptions) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const interactive = isInteractive();\n\n // Resolve version number\n let versionNumber = options.versionNumber;\n if (!versionNumber && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'versionNumber',\n message: 'Version number (semver):',\n },\n ]);\n versionNumber = answer.versionNumber;\n }\n\n // Resolve description\n let description = options.description;\n if (!description && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n { type: 'input', name: 'description', message: 'Description:' },\n ]);\n description = answer.description;\n }\n\n // Resolve body\n let body = options.body;\n if (options.bodyFile) {\n body = await readFile(options.bodyFile, 'utf-8');\n }\n if (!body && interactive) {\n const { default: inquirer } = await import('inquirer');\n const answer = await inquirer.prompt([\n { type: 'editor', name: 'body', message: 'Body (markdown):' },\n ]);\n body = answer.body;\n }\n\n // Validate required fields\n const missing: string[] = [];\n if (!versionNumber) missing.push('--version-number <semver>');\n if (!description) missing.push('--description <text>');\n if (!body) missing.push('--body <text> or --body-file <path>');\n\n if (missing.length > 0) {\n output.error(\n `Error: The following options are required in non-interactive mode:\\n ${missing.join('\\n ')}`,\n 'Provide all required options, or run interactively (in a TTY) to be prompted.'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.post<SkillVersion>(\n `/skills/${identifier}/versions`,\n {\n version_number: versionNumber,\n description,\n body,\n }\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n console.log(chalk.green('Version created successfully'));\n console.log();\n console.log(` ${'Version'.padEnd(15)}${response.version_number}`);\n console.log(\n ` ${'Description'.padEnd(15)}${response.description || chalk.dim('\u2014')}`\n );\n console.log(` ${'Created'.padEnd(15)}just now`);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to create version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter } from '../../../lib/output.js';\nimport type { SkillVersion } from '../../../lib/api-types.js';\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\nexport function createSkillVersionGetCommand(): Command {\n const cmd = new Command('get');\n\n cmd\n .description('Get skill version details')\n .argument('<version_id>', 'Skill version UUID')\n .action(async (versionId: string) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n const response = await client.get<SkillVersion>(`/skill-versions/${versionId}`);\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n const skillName = response.skill?.name || 'unknown';\n console.log(chalk.bold(`${skillName} - ${response.version_number}`));\n console.log();\n console.log(\n ` ${'Description'.padEnd(15)}${response.description || chalk.dim('\u2014')}`\n );\n console.log(\n ` ${'Author'.padEnd(15)}${response.author?.name || chalk.dim('\u2014')}`\n );\n console.log(` ${'Created'.padEnd(15)}${formatDate(response.created_at)}`);\n console.log(\n ` ${'Last Updated'.padEnd(15)}${formatDate(response.updated_at)}`\n );\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to get version: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\nimport { GuildAPIClient } from '../../../lib/api-client.js';\nimport { getAuthToken } from '../../../lib/auth.js';\nimport { handleAxiosError } from '../../../lib/errors.js';\nimport { isMachineReadable } from '../../../lib/output-mode.js';\nimport { createOutputWriter, formatSkillVersionTable } from '../../../lib/output.js';\nimport { DEFAULT_PAGE_LIMIT } from '../../../lib/api-types.js';\nimport type { SkillVersionListResponse } from '../../../lib/api-types.js';\n\nexport function createSkillVersionListCommand(): Command {\n const cmd = new Command('list');\n\n cmd\n .description('List skill versions')\n .argument('<identifier>', 'Skill ID or full name (e.g., \"myorg~tone-guide\")')\n .option(\n '--limit <number>',\n `Number of results to return (default: ${DEFAULT_PAGE_LIMIT})`,\n String(DEFAULT_PAGE_LIMIT)\n )\n .option('--offset <number>', 'Offset for pagination (default: 0)', '0')\n .action(async (identifier: string, options: { limit: string; offset: string }) => {\n const output = createOutputWriter();\n\n try {\n const token = await getAuthToken();\n if (!token) {\n output.error(\n 'Not authenticated. Please log in first.',\n 'Run: guild auth login'\n );\n process.exit(1);\n }\n\n const client = new GuildAPIClient();\n\n const params = new URLSearchParams();\n params.append('limit', options.limit);\n params.append('offset', options.offset);\n\n const response = await client.get<SkillVersionListResponse>(\n `/skills/${identifier}/versions?${params.toString()}`\n );\n\n if (isMachineReadable()) {\n output.data(response);\n } else {\n formatSkillVersionTable(response.items, response.pagination, identifier);\n }\n } catch (error: unknown) {\n const formattedError = handleAxiosError(error);\n output.error(`Failed to list versions: ${formattedError.details}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\n// Guild logo & variations\n\n// Small logos from main branch (too small for CLI startup, preserved for reference/spinners)\n// const LOGO_3 = ['\u28CC\u283F\u28E1', '\u288B\u28F6\u2859'];\n\n// const LOGO_6 = ['\u2870\u280E\u28F7\u28DE\u2831\u2886', '\u28F9\u28FE\u2800\u2800\u287F\u28CF', '\u2831\u2886\u287D\u28BF\u2870\u280E'];\n\n// const LOGO_9 = ['\u2800\u28E4\u281B\u28FF\u28F4\u283E\u281B\u28E4\u2800', '\u28FF\u2801\u28E4\u283F\u283F\u2837\u28E4\u28ED\u28FF', '\u28D8\u28F7\u28FF\u2800\u2800\u2800\u28FF\u28BF\u284D', '\u28FF\u285B\u281B\u28F6\u28F6\u28F6\u281B\u2880\u28FF', '\u2800\u281B\u28E4\u2876\u281F\u28FF\u28E4\u281B\u2800'];\n\nconst LOGO_12 = [\n '\u2800\u2880\u2878\u283F\u28FF\u28C7\u28F4\u283F\u283F\u28C7\u2840 ',\n '\u28F6\u284E\u2801\u2800\u28FF\u28FF\u28F7\u28F6\u2800\u2809\u28B1\u28F6',\n '\u283B\u28E7\u28F8\u28FF\u2800\u2800\u2800\u2800\u28FF\u28FF\u287F\u283F',\n '\u28F6\u28FE\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u284F\u28BF\u28C6',\n '\u283F\u28C7\u2840\u2800\u283F\u28BF\u28FF\u28FF\u2800\u28C0\u2878\u283F',\n '\u2800\u2809\u28B1\u28F6\u28FE\u281F\u28B9\u28FF\u28F6\u284F\u2801\u2800',\n];\n\n// Medium/Large logos\nconst LOGO_14 = [\n '\u2800\u2800\u2800\u28B8\u28FF\u28FF\u2847\u2800\u28E0\u28F6\u28FF\u2847\u2800\u2800\u2800',\n '\u2800\u2800\u28FF\u2847\u2800\u28FF\u28E7\u28FF\u281F\u2801\u2800\u2800\u28FF\u2847\u2800',\n '\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28B8\u28FF',\n '\u2838\u28FF\u2840\u28B8\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF',\n '\u2800\u2839\u28FF\u28FE\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28F7\u28C4\u2800',\n '\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u2847\u2808\u28FF\u2846',\n '\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF',\n '\u2800\u2800\u28FF\u2847\u2800\u2800\u28E0\u28FF\u28BB\u28FF\u2800\u2800\u28FF\u2847\u2800',\n '\u2800\u2800\u2800\u28B8\u28FF\u283F\u281F\u2801\u28B8\u28FF\u28FF\u2847\u2800\u2800\u2800',\n];\n\nconst LOGO_17_BLK = [\n ' \u2588 \u25A0 \u25A0 \u25A0 ',\n ' \u2588 \u25A0 \u25A0 \u25A0 ',\n '\u2588 \u25A0 \u25A0 \u25A0 \u25A0',\n '\u2588 \u2588 \u2588 \u2588 \u2588',\n ' \u2588 \u2588 \u2588 \u2588 ',\n '\u2588 \u2588 \u2588 \u2588 \u2588',\n '\u25A0 \u25A0 \u25A0 \u25A0 \u2588',\n ' \u25A0 \u25A0 \u25A0 \u2588 ',\n ' \u25A0 \u25A0 \u25A0 \u2588 ',\n];\n\nconst LOGO_17_DOT = [\n ' \u25A0 \u25A0 \u25A0 \u25A0 ',\n ' \u25A0 \u25A0 \u25A0 \u25A0 ',\n '\u25A0 \u25A0 \u25A0 \u25A0 \u25A0',\n '\u25A0 \u25A0 \u25A0 \u25A0 \u25A0',\n ' \u25A0 \u25A0 \u25A0 \u25A0 ',\n '\u25A0 \u25A0 \u25A0 \u25A0 \u25A0',\n '\u25A0 \u25A0 \u25A0 \u25A0 \u25A0',\n ' \u25A0 \u25A0 \u25A0 \u25A0 ',\n ' \u25A0 \u25A0 \u25A0 \u25A0 ',\n];\n\nconst LOGO_20_ENV = [\n '\u28FF\u28FF\u28FF\u28FF\u2847\u2800\u2800\u2800\u2800\u28FF\u28FF\u281F\u2809\u2801\u2800\u28FF\u28FF\u28FF\u28FF\u28FF',\n '\u28FF\u28FF\u285F\u281B\u28B3\u28F6\u28E6\u2800\u2800\u280F\u2800\u2800\u28E0\u28E4\u28F6\u285F\u281B\u28BB\u28FF\u28FF',\n '\u283F\u283F\u28C7\u28C0\u28F8\u28FF\u28FF\u2800\u2800\u2800\u2820\u283F\u283F\u28FF\u28FF\u28C7\u28C0\u2878\u283F\u28BF',\n '\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2847\u2800\u28B8',\n '\u28C7\u2800\u2818\u28FF\u2847\u2800\u28B8\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28B8',\n '\u28FF\u28C4\u2800\u2808\u2807\u2800\u28B8\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2810\u28B6\u28F6\u28FE',\n '\u283F\u283F\u2837\u2800\u2800\u2800\u28B8\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u28E6\u2840\u2800\u283B\u28FF',\n '\u2800\u2800\u2800\u2800\u2800\u2800\u28B8\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u2800\u2800\u28FF',\n '\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2847\u2800\u28B8',\n '\u28FF\u28FF\u284F\u2809\u28B9\u28FF\u28FF\u28FF\u287F\u2800\u2800\u2800\u2800\u28FF\u28FF\u284F\u2809\u28B9\u28FF\u28FF',\n '\u28FF\u28FF\u28E7\u28E4\u285C\u281B\u281B\u2809\u2800\u2800\u28FE\u2800\u2800\u281B\u281B\u28E7\u28E4\u28FC\u28FF\u28FF',\n '\u28FF\u28FF\u28FF\u28FF\u28C7\u28C0\u28E0\u28E4\u28F6\u28FF\u28FF\u28C0\u28C0\u28C0\u28C0\u28FF\u28FF\u28FF\u28FF\u28FF',\n];\n\nconst LOGO_20 = [\n '\u2800\u2800\u2800\u2800\u28B8\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u28E0\u28F6\u28FE\u28FF\u2800\u2800\u2800\u2800\u2800',\n '\u2800\u2800\u28A0\u28E4\u284C\u2809\u2819\u28FF\u28FF\u28F0\u28FF\u28FF\u281F\u281B\u2809\u28A0\u28E4\u2844\u2800\u2800',\n '\u28C0\u28C0\u2838\u283F\u2807\u2800\u2800\u28FF\u28FF\u28FF\u28DF\u28C0\u28C0\u2800\u2800\u2838\u283F\u2887\u28C0\u2840',\n '\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u28B8\u28FF\u2847',\n '\u2838\u28FF\u28E7\u2800\u28B8\u28FF\u2847\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2847',\n '\u2800\u283B\u28FF\u28F7\u28F8\u28FF\u2847\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28EF\u2849\u2809\u2801',\n '\u28C0\u28C0\u28C8\u28FF\u28FF\u28FF\u2847\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u2819\u28BF\u28FF\u28C4\u2800',\n '\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2847\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u2800',\n '\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u28B8\u28FF\u2847',\n '\u2800\u2800\u28B0\u28F6\u2846\u2800\u2800\u2800\u2880\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u28B2\u28F6\u2846\u2800\u2800',\n '\u2800\u2800\u2818\u281B\u28A3\u28E4\u28E4\u28F6\u28FF\u28FF\u2801\u28FF\u28FF\u28E4\u28E4\u281A\u281B\u2803\u2800\u2800',\n '\u2800\u2800\u2800\u2800\u2838\u283F\u281F\u281B\u2809\u2800\u2800\u283F\u283F\u283F\u283F\u2800\u2800\u2800\u2800\u2800',\n];\n\nconst LOGO_15_A = [\n ' \u2800\u2800\u2800\u28B8\u28FF\u28FF\u2847\u28E0\u28F6\u28FF\u2847\u2800 ',\n '\u2800\u2800\u28FF\u2847\u2800\u28FF\u28E7\u28FF\u281F\u2801\u2800\u2800 \u28FF\u2847',\n '\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28B8\u28FF',\n '\u2838\u28FF\u2840\u28B8\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF',\n '\u2800\u2839\u28FF\u28FE\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28F7\u28C4\u2800',\n '\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u2847\u2808\u28FF\u2846',\n '\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28FF ',\n '\u2800\u2800\u28FF\u2847\u2800\u2800\u28E0\u28FF\u28BB\u28FF\u2800\u2800\u28FF\u2800\u2800',\n '\u2800\u2800\u2800\u28B8\u28FF\u283F\u281F\u2801\u28B8\u28FF\u28FF\u2847\u2800\u2800 ',\n];\n\nconst LOGO_15_B = [\n '\u2800\u2800\u2800\u28B8\u28FF\u28FF\u2847\u2800\u28E4\u28F6\u28FF\u2805\u2800\u2800\u2800',\n '\u2800\u2800\u28FF\u2842\u2800\u28FF\u28E7\u28FF\u281F\u2801\u2800\u28B8\u28FF\u2800\u2800',\n '\u28FF\u28FF\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28FF\u2847',\n '\u2838\u28FF\u2840\u28B8\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2847',\n '\u2800\u2819\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u2844\u2800',\n '\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u28FF\u2806\u2818\u28FF\u2840',\n '\u28FF\u287F\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28FF\u2847',\n '\u2800\u2800\u287F\u2805\u2800\u28C0\u28FC\u287F\u28FF\u28FF\u2800\u28B8\u287F\u2800\u2800',\n '\u2800\u2800\u2800\u2838\u283F\u281F\u280B\u2800\u283F\u283F\u283F\u2805\u2800\u2800\u2800',\n];\n\nconst LOGO_18 = [\n '\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u28E0\u28F4\u28FE\u28FF\u28FF\u2800 ',\n '\u2800\u2800\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u28FE\u28FF\u280B\u2801\u2800\u2800\u28FF\u28FF\u2800\u2800',\n '\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u28FF',\n '\u2839\u28FF\u28C6\u2800\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF',\n '\u2800\u2819\u28BF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28F7\u2844\u2800',\n '\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u2808\u283B\u28FF\u28C4',\n '\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u28FF',\n '\u2800\u2800\u28FF\u28FF\u2800\u2800\u2880\u28F4\u28FF\u287F\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u2800\u2800',\n '\u2800\u2800\u2800\u2800\u28FF\u28FF\u287F\u281F\u2809\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800',\n];\n\nconst LOGO_18_INV = [\n '\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u28FF\u281F\u2809\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF',\n '\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u2800\u2800\u2801\u2880\u28E4\u28FE\u28FF\u28FF\u2800\u2800\u28FF\u28FF',\n '\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u2800',\n '\u2844\u2800\u2839\u28FF\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800',\n '\u28FF\u28C6\u2840\u2808\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2840\u2809\u283B\u28FF',\n '\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u28FF\u28C4\u2800\u2818',\n '\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF\u2800\u2800',\n '\u28FF\u28FF\u2800\u2800\u28FF\u28FF\u287F\u281F\u2801\u2880\u2800\u2800\u28FF\u28FF\u2800\u2800\u28FF\u28FF',\n '\u28FF\u28FF\u28FF\u28FF\u2800\u2800\u2800\u28C0\u28F4\u28FE\u2800\u2800\u2800\u2800\u28FF\u28FF\u28FF\u28FF',\n];\n\nconst ALL_LOGOS = [\n // LOGO_3, LOGO_6, LOGO_9 are too small (commented out above, kept for reference)\n LOGO_12,\n LOGO_14,\n LOGO_17_BLK,\n LOGO_17_DOT,\n LOGO_20_ENV,\n LOGO_20,\n LOGO_15_A,\n LOGO_15_B,\n LOGO_18,\n LOGO_18_INV,\n];\n\n// Pick a random logo each time the CLI starts\nfunction getRandomLogo(): string[] {\n const randomIndex = Math.floor(Math.random() * ALL_LOGOS.length);\n return ALL_LOGOS[randomIndex];\n}\n\nexport default getRandomLogo();\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport chalk from 'chalk';\nimport LOGO from './logo.js';\nimport { brand } from './colors.js';\nimport { isMachineReadable } from './output-mode.js';\n\ninterface SplashOptions {\n version: string;\n}\n\n/**\n * Show splash screen with logo\n */\nexport function showSplashScreen(options: SplashOptions): void {\n console.log('');\n LOGO.forEach((line: string) => console.log(brand(line)));\n console.log('');\n console.log('Guild.ai CLI');\n console.log(chalk.dim(`v${options.version}`));\n console.log('');\n}\n\n/**\n * Determine if splash screen should be shown\n *\n * Show for: help, version, interactive chat\n * Never for: --json, data commands, action commands\n */\nexport function shouldShowSplash(): boolean {\n // Never in machine-readable mode (--mode json, --mode jsonl, --json)\n if (isMachineReadable()) {\n return false;\n }\n\n const args = process.argv.slice(2);\n\n // Show for top-level help/version only\n // Don't show for subcommand help (e.g., 'guild chat --help')\n // Note: chat command renders its own header, so we skip splash for it\n if (args.length === 0 || args[0] === 'version') {\n return true;\n }\n\n // Only show splash for top-level --help (no other commands before it)\n if ((args[0] === '--help' || args[0] === '-h') && args.length === 1) {\n return true;\n }\n\n return false;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport https from 'https';\nimport { getOutputMode, isQuietMode } from './output-mode.js';\n\n/**\n * Fire-and-forget check for a newer version on npm.\n * Prints a one-liner to stderr if an update is available.\n * Network failures are silently ignored.\n */\nexport function checkForUpdate(currentVersion: string): void {\n // Suppress in JSON mode, quiet mode, or non-TTY stderr\n if (getOutputMode() === 'json' || isQuietMode() || !process.stderr.isTTY) {\n return;\n }\n\n const req = https.get(\n 'https://registry.npmjs.org/@guildai/cli/latest',\n { timeout: 3000 },\n (res) => {\n let data = '';\n res.on('data', (chunk: Buffer) => {\n data += chunk.toString();\n });\n res.on('end', () => {\n try {\n const pkg = JSON.parse(data) as { version?: string };\n if (pkg.version && isNewer(pkg.version, currentVersion)) {\n process.stderr.write(\n `\\nUpdate available: ${currentVersion} \u2192 ${pkg.version} Run: npm install -g @guildai/cli\\n`\n );\n }\n } catch {\n // malformed JSON \u2014 ignore\n }\n });\n }\n );\n\n req.on('error', () => {\n // network failure \u2014 ignore\n });\n\n req.on('timeout', () => {\n req.destroy();\n });\n\n // Don't let this request keep the process alive\n if (req.socket) {\n req.socket.unref();\n } else {\n req.on('socket', (socket) => {\n socket.unref();\n });\n }\n}\n\n/**\n * Simple numeric version comparison (major.minor.patch).\n * Returns true if `latest` is strictly newer than `current`.\n */\nexport function isNewer(latest: string, current: string): boolean {\n const l = latest.split('.').map(Number);\n const c = current.split('.').map(Number);\n for (let i = 0; i < Math.max(l.length, c.length); i++) {\n const lv = l[i] ?? 0;\n const cv = c[i] ?? 0;\n if (lv > cv) return true;\n if (lv < cv) return false;\n }\n return false;\n}\n", "// Copyright 2026 Guild.ai\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander';\n\ninterface CommandEntry {\n path: string;\n description: string;\n leafName: string;\n}\n\n/**\n * Recursively collects all commands from the command tree.\n * Includes both leaf commands and command groups (parents with subcommands).\n * Aliases are added as separate entries.\n */\nexport function getAllCommands(cmd: Command, prefix = ''): CommandEntry[] {\n const results: CommandEntry[] = [];\n\n for (const sub of cmd.commands as Command[]) {\n const name = sub.name();\n const cmdPath = prefix ? `${prefix} ${name}` : name;\n const description = sub.description();\n const hasChildren = (sub.commands as Command[]).length > 0;\n\n // Always include this command (even if it has subcommands)\n results.push({ path: cmdPath, description, leafName: name });\n\n // If this command has subcommands, also recurse into them\n if (hasChildren) {\n results.push(...getAllCommands(sub, cmdPath));\n }\n\n // Add aliases as separate entries\n for (const alias of sub.aliases()) {\n const aliasPath = prefix ? `${prefix} ${alias}` : alias;\n results.push({ path: aliasPath, description, leafName: alias });\n\n if (hasChildren) {\n results.push(...getAllCommands(sub, aliasPath));\n }\n }\n }\n\n return results;\n}\n\n/**\n * Standard Levenshtein distance between two strings.\n */\nexport function levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n\n // Use a single-row DP approach for space efficiency\n const row: number[] = Array.from({ length: n + 1 }, (_, i) => i);\n\n for (let i = 1; i <= m; i++) {\n let prev = i - 1;\n row[0] = i;\n\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n const val = Math.min(\n row[j] + 1, // deletion\n row[j - 1] + 1, // insertion\n prev + cost // substitution\n );\n prev = row[j];\n row[j] = val;\n }\n }\n\n return row[n];\n}\n\n/**\n * Recursively disables Commander's built-in suggestion on all commands.\n */\nfunction disableBuiltinSuggestions(cmd: Command): void {\n cmd.showSuggestionAfterError(false);\n for (const sub of cmd.commands as Command[]) {\n disableBuiltinSuggestions(sub);\n }\n}\n\n/**\n * Creates the writeErr handler that intercepts \"unknown command\" errors\n * and prints cross-level suggestions.\n */\nfunction createWriteErrHandler(program: Command): (str: string) => void {\n return (str: string): void => {\n // Always write the original error\n process.stderr.write(str);\n\n // Check if this is an \"unknown command\" error\n const match = /unknown command '([^']+)'/.exec(str);\n if (!match) {\n return;\n }\n\n const unknown = match[1];\n const allCommands = getAllCommands(program);\n\n // Determine the typed parent context from process.argv\n // e.g., \"guild agent trigger\" \u2192 typed args are [\"agent\", \"trigger\"]\n const typedArgs = process.argv.slice(2);\n const typedParent = typedArgs.slice(0, -1).join(' ');\n\n // Score each command\n const scored = allCommands.map((entry) => {\n const leafName = entry.leafName;\n\n // Exact leaf name match gets score 0\n let score = leafName === unknown ? 0 : levenshtein(unknown, leafName);\n\n // Context bonus: if command's parent matches typed parent, reduce score\n const entryParts = entry.path.split(' ');\n const entryParent = entryParts.slice(0, -1).join(' ');\n if (entryParent === typedParent && score > 0) {\n score -= 0.5;\n }\n\n return { ...entry, score };\n });\n\n // Filter poor matches\n const threshold = Math.max(2, unknown.length / 2);\n const filtered = scored.filter((s) => s.score <= threshold);\n\n if (filtered.length === 0) {\n return;\n }\n\n // Sort by score, deduplicate by path\n filtered.sort((a, b) => a.score - b.score);\n const seen = new Set<string>();\n const unique = filtered.filter((entry) => {\n if (seen.has(entry.path)) {\n return false;\n }\n seen.add(entry.path);\n return true;\n });\n\n // Print top 5 suggestions\n const top = unique.slice(0, 5);\n process.stderr.write('\\nDid you mean?\\n');\n for (const entry of top) {\n const cmd = `guild ${entry.path}`;\n const padding = ' '.repeat(Math.max(2, 30 - cmd.length));\n process.stderr.write(` ${cmd}${padding}${entry.description}\\n`);\n }\n };\n}\n\n/**\n * Recursively configures writeErr on a command and all its subcommands.\n */\nfunction configureOutputRecursively(\n cmd: Command,\n writeErr: (str: string) => void\n): void {\n cmd.configureOutput({ writeErr });\n for (const sub of cmd.commands as Command[]) {\n configureOutputRecursively(sub, writeErr);\n }\n}\n\n/**\n * Sets up cross-level \"Did you mean?\" suggestions for unknown commands.\n *\n * Disables Commander's built-in same-level suggestions and intercepts\n * \"unknown command\" errors to search the entire command tree.\n */\nexport function setupUnknownCommandSuggestions(program: Command): void {\n // Disable Commander's built-in suggestion on all commands\n disableBuiltinSuggestions(program);\n\n // Create a shared writeErr handler and apply it to all commands\n const writeErr = createWriteErrHandler(program);\n configureOutputRecursively(program, writeErr);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["readFileSync", "existsSync", "path", "resolve", "resolve", "fs", "path", "fs", "path", "fs", "path", "readline", "resolve", "path", "fs", "path", "fs", "readline", "promptForName", "resolve", "isDirectoryEmpty", "SORT_MAP", "fs", "target", "fs", "matchesWorkspaceArg", "join", "join", "VALID_GLOBAL_KEYS", "fs", "execa", "path", "fs", "path", "fileExists", "fs", "SORT_MAP", "formatDate", "formatDate", "readFileSync", "readFileSync", "formatDate", "SORT_MAP", "readFile", "readFile", "formatDate", "program", "path", "existsSync", "readFileSync"]
7
+ }