surfcode 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +325 -2
- package/assets/surfcode-logo.gif +0 -0
- package/dist/cli/auth.js +315 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/config.js +228 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/headless.js +355 -0
- package/dist/cli/headless.js.map +1 -0
- package/dist/cli/inspect.js +462 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/cli/interactive.js +130 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/sessions.js +170 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/sync.js +190 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/util.js +345 -0
- package/dist/cli/util.js.map +1 -0
- package/dist/cli.js +485 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/agent.js +298 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/agents.js +55 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/auth.js +107 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/catalog.js +306 -0
- package/dist/core/catalog.js.map +1 -0
- package/dist/core/chat/anthropic.js +222 -0
- package/dist/core/chat/anthropic.js.map +1 -0
- package/dist/core/chat/common.js +367 -0
- package/dist/core/chat/common.js.map +1 -0
- package/dist/core/chat/google.js +180 -0
- package/dist/core/chat/google.js.map +1 -0
- package/dist/core/chat/index.js +80 -0
- package/dist/core/chat/index.js.map +1 -0
- package/dist/core/chat/openai.js +164 -0
- package/dist/core/chat/openai.js.map +1 -0
- package/dist/core/chat/types.js +2 -0
- package/dist/core/chat/types.js.map +1 -0
- package/dist/core/clipboard.js +34 -0
- package/dist/core/clipboard.js.map +1 -0
- package/dist/core/compact.js +39 -0
- package/dist/core/compact.js.map +1 -0
- package/dist/core/config.js +211 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/delegate.js +184 -0
- package/dist/core/delegate.js.map +1 -0
- package/dist/core/effort.js +80 -0
- package/dist/core/effort.js.map +1 -0
- package/dist/core/errors.js +32 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/free.js +21 -0
- package/dist/core/free.js.map +1 -0
- package/dist/core/github.js +445 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/paths.js +51 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/prompt.js +95 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/provider.js +298 -0
- package/dist/core/provider.js.map +1 -0
- package/dist/core/session.js +159 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/sync.js +126 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/usage.js +127 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/workspace.js +70 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/data/models.json +1 -0
- package/dist/sync/server.js +179 -0
- package/dist/sync/server.js.map +1 -0
- package/dist/tools/diff.js +21 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/files.js +227 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/github.js +238 -0
- package/dist/tools/github.js.map +1 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.js +231 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shell.js +118 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/todos.js +50 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/webfetch.js +108 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tui/App.js +2984 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/ansi.js +151 -0
- package/dist/tui/ansi.js.map +1 -0
- package/dist/tui/commands.js +61 -0
- package/dist/tui/commands.js.map +1 -0
- package/dist/tui/explorer.js +152 -0
- package/dist/tui/explorer.js.map +1 -0
- package/dist/tui/icons.js +21 -0
- package/dist/tui/icons.js.map +1 -0
- package/dist/tui/layout.js +324 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/markdown.js +355 -0
- package/dist/tui/markdown.js.map +1 -0
- package/dist/tui/overlays.js +316 -0
- package/dist/tui/overlays.js.map +1 -0
- package/dist/tui/render.js +234 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/theme.js +148 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.js +73 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +75 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,IAAI,EACJ,iBAAiB,EACjB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACN,MAAM,WAAW,CAAC;AAEnB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAY7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,IAAI,SAAS,CAAC,yCAAyC,EAAE;gBAC7D,IAAI,EAAE,6CAA6C;aACpD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,EAAE,KAAK,WAAW;QACxB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CACzD,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,SAAS,CAAC,qBAAqB,WAAW,GAAG,EAAE;YACvD,IAAI,EAAE,oDAAoD;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,KAAK;gBAAE,KAAK,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;YACxC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;YACzF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM;gBACpD,CAAC,CAAC,aAAa,QAAQ,CAAC,EAAE,SAAS;gBACnC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,EAAE,SAAS,CAAC;YAC5C,KAAK,CACH,OAAO,CACL,2BAA2B,QAAQ,2CAA2C,CAC/E,CACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,CACH,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,cAAc,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,GAAG,CAC3G,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,uBAAuB,QAAQ,CAAC,IAAI,EAAE,EAAE;YAC1D,IAAI,EAAE,sBAAsB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,sBAAsB,sBAAsB;SAC5F,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpD,OAAO,MAAM,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAoB;IACnD,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;YACxC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YACtC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,OAAO;YAAE,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACtE,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,OAAO,IAAI,sBAAsB,sCAAsC,CAAC,CAAC,CAAC;QACzG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,0BAA0B,EAAE;YAC9C,IAAI,EAAE,gEAAgE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC,CAAC;IAC3F,KAAK,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACtD,OAAO,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAa;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,iCAAiC,EAAE;YACrD,IAAI,EAAE,8CAA8C;SACrD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CACH,IAAI,CAAC,SAAS,CACZ;YACE,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;SAClB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnG,KAAK,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC,CAAC;IACjG,KAAK,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAAyB,EACzB,GAAW,EACX,MAAkB,EAClB,IAAa;IAEb,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,+BAA+B,EAAE;YACnD,IAAI,EAAE,8CAA8C;SACrD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAExC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CACH,IAAI,CAAC,SAAS,CACZ;YACE,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;SAClB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,CAAC,CAAC,mBAAmB,QAAQ,CAAC,EAAE,UAAU;YAC1C,CAAC,CAAC,aAAa,QAAQ,CAAC,EAAE,UAAU,CAAC;QACvC,KAAK,CACH,OAAO,CACL,gDAAgD,QAAQ,iBAAiB,CAC1E,CACF,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,UAAU,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAkB,EAAE,OAAoB;IAC9D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACpD,IAAI,OAAO,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,CACL,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;YAC1D,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ;YAC/B,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACxC,MAAM,QAAQ,GACZ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CACH,IAAI,CAAC,SAAS,CACZ;YACE,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;YAC/B,MAAM,EAAE;gBACN,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;gBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;aAC9B;YACD,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACrC,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;oBACvC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBACzD,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;oBAC9B,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI;oBAChC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC9B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAChC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;iBACjC,CAAC;YACJ,CAAC,CAAC;SACH,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CACH,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,EAAE,CACzG,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC,CAAC;QACpF,KAAK,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,EAAE,CAAC;IAER,KAAK,CACH,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,EACrD,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,IAAI,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,GAAG,OAAO,CACb,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,UAAU;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;gBACxB,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK;oBACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,EAAE,CAAC;oBAC9C,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;YAC5B,CAAC,CAAC,GAAG,CAAC;QACR,OAAO;YACL,GAAG,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACjF,QAAQ,CAAC,EAAE;YACX,KAAK;YACL,KAAK,CAAC,MAAM,CAAC;YACb,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,EAAE,CAAC;IACR,KAAK,CACH,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAC1E,MAAM,CAAC,UAAU;QACf,CAAC,CAAC,mBAAmB,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,MAAM,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;QACtG,CAAC,CAAC,qDAAqD,CAC1D,EAAE,CACJ,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC1D,KAAK,CAAC,KAAK,CAAC,GAAG,cAAc,MAAM,aAAa,8BAA8B,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAClJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;QAC9C,KAAK,CAAC,mEAAmE,CAAC;QAC1E,EAAE;QACF,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE;QACtB,uBAAuB;QACvB,+BAA+B;QAC/B,0BAA0B;QAC1B,iCAAiC;QACjC,oBAAoB;QACpB,gCAAgC;QAChC,EAAE;QACF,GAAG,KAAK,CAAC,6EAA6E,CAAC,EAAE;QACzF,GAAG,KAAK,CAAC,8DAA8D,CAAC,EAAE;KAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,mBAAmB,QAAQ,CAAC,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;QACjF,CAAC,CAAC,mBAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
3
|
+
import { defaultConfig, loadConfig, readConfigValue, saveConfig, updateConfigPath } from '../core/config.js';
|
|
4
|
+
import { SurfError } from '../core/errors.js';
|
|
5
|
+
import { ensurePaths, getPaths } from '../core/paths.js';
|
|
6
|
+
import { accent, danger, muted, success, title, warning, write } from './util.js';
|
|
7
|
+
const TOP_LEVEL_KEYS = new Set([
|
|
8
|
+
'version',
|
|
9
|
+
'provider',
|
|
10
|
+
'model',
|
|
11
|
+
'theme',
|
|
12
|
+
'mode',
|
|
13
|
+
'permissions',
|
|
14
|
+
'maxSteps',
|
|
15
|
+
'maxTokens',
|
|
16
|
+
'temperature',
|
|
17
|
+
'effort',
|
|
18
|
+
'showReasoning',
|
|
19
|
+
'verboseTools',
|
|
20
|
+
'streaming',
|
|
21
|
+
'explorerWidth',
|
|
22
|
+
'fullAccess',
|
|
23
|
+
'agents',
|
|
24
|
+
'allowOutsideWorkspace',
|
|
25
|
+
'providers',
|
|
26
|
+
'customProviders',
|
|
27
|
+
'sync'
|
|
28
|
+
]);
|
|
29
|
+
const SYNC_KEYS = new Set(['url', 'token', 'enabled', 'auto', 'cursor', 'lastSyncAt', 'deviceId']);
|
|
30
|
+
const PROVIDER_KEYS = new Set([
|
|
31
|
+
'apiKey',
|
|
32
|
+
'baseURL',
|
|
33
|
+
'headers',
|
|
34
|
+
'dialect',
|
|
35
|
+
'apiVersion',
|
|
36
|
+
'deployment',
|
|
37
|
+
'project',
|
|
38
|
+
'location',
|
|
39
|
+
'extraBody',
|
|
40
|
+
'timeout',
|
|
41
|
+
'retries',
|
|
42
|
+
'retryDelay',
|
|
43
|
+
'keyless',
|
|
44
|
+
'name',
|
|
45
|
+
'env',
|
|
46
|
+
'doc',
|
|
47
|
+
'models'
|
|
48
|
+
]);
|
|
49
|
+
const PERMISSION_KEYS = new Set(['read', 'write', 'shell', 'fetch']);
|
|
50
|
+
const AGENTS_KEYS = new Set(['enabled', 'workers']);
|
|
51
|
+
export async function configShowCommand() {
|
|
52
|
+
const paths = getPaths();
|
|
53
|
+
const config = await loadConfig();
|
|
54
|
+
let exists = false;
|
|
55
|
+
try {
|
|
56
|
+
await stat(paths.configFile);
|
|
57
|
+
exists = true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Defaults are in use.
|
|
61
|
+
}
|
|
62
|
+
write(`${title('Config')} ${muted(`· ${paths.configFile}`)}`);
|
|
63
|
+
if (!exists)
|
|
64
|
+
write(muted(' file does not exist yet · showing defaults'));
|
|
65
|
+
write();
|
|
66
|
+
write(JSON.stringify(redact(config), null, 2));
|
|
67
|
+
write();
|
|
68
|
+
write(muted('Secrets are redacted. Edit the file to change API keys.'));
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
export async function configPathCommand() {
|
|
72
|
+
await ensurePaths();
|
|
73
|
+
write(getPaths().configFile);
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
export async function configGetCommand(key, options) {
|
|
77
|
+
const raw = await readFile(getPaths().configFile, 'utf8').catch(() => undefined);
|
|
78
|
+
if (!raw) {
|
|
79
|
+
write(options.json ? 'null' : muted('(not set)'));
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
const config = await loadConfig();
|
|
83
|
+
const value = redactValue(readConfigValue(config, key.split('.')), key.split('.').at(-1));
|
|
84
|
+
if (value === undefined) {
|
|
85
|
+
write(options.json ? 'null' : muted('(not set)'));
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
if (options.json) {
|
|
89
|
+
write(JSON.stringify(value, null, 2));
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
if (typeof value === 'string')
|
|
93
|
+
write(value);
|
|
94
|
+
else if (typeof value === 'number' || typeof value === 'boolean')
|
|
95
|
+
write(String(value));
|
|
96
|
+
else
|
|
97
|
+
write(JSON.stringify(value, null, 2));
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
export async function configSetCommand(key, rawValue) {
|
|
101
|
+
const path = key.split('.').filter(Boolean);
|
|
102
|
+
if (path.length === 0)
|
|
103
|
+
throw new SurfError('A config key is required.');
|
|
104
|
+
if (!TOP_LEVEL_KEYS.has(path[0])) {
|
|
105
|
+
throw new SurfError(`Unknown config key "${path[0]}"`, {
|
|
106
|
+
hint: `Top-level keys: ${[...TOP_LEVEL_KEYS].join(', ')}.`
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (path[0] === 'permissions' && path[1] && !PERMISSION_KEYS.has(path[1])) {
|
|
110
|
+
throw new SurfError(`Unknown permission "${path[1]}"`, {
|
|
111
|
+
hint: `Permissions: ${[...PERMISSION_KEYS].join(', ')}.`
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (path[0] === 'sync' && path[1] && !SYNC_KEYS.has(path[1])) {
|
|
115
|
+
throw new SurfError(`Unknown sync setting "${path[1]}"`, {
|
|
116
|
+
hint: `Sync settings: ${[...SYNC_KEYS].join(', ')}.`
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (path[0] === 'agents' && path[1] && !AGENTS_KEYS.has(path[1])) {
|
|
120
|
+
throw new SurfError(`Unknown agent setting "${path[1]}"`, {
|
|
121
|
+
hint: `Agent settings: ${[...AGENTS_KEYS].join(', ')}.`
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if ((path[0] === 'providers' || path[0] === 'customProviders') &&
|
|
125
|
+
path.length === 3 &&
|
|
126
|
+
!PROVIDER_KEYS.has(path[2])) {
|
|
127
|
+
throw new SurfError(`Unknown provider setting "${path[2]}"`, {
|
|
128
|
+
hint: `Provider settings: ${[...PROVIDER_KEYS].join(', ')}.`
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const value = parseValue(rawValue);
|
|
132
|
+
const config = await updateConfigPath(path, value);
|
|
133
|
+
const saved = readConfigValue(config, path);
|
|
134
|
+
const shown = isSensitivePath(path) ? '<redacted>' : formatValue(saved);
|
|
135
|
+
write(`${success('✓')} ${accent(path.join('.'))} ${muted('=')} ${shown}`);
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
export async function configValidateCommand() {
|
|
139
|
+
try {
|
|
140
|
+
const config = await loadConfig();
|
|
141
|
+
write(`${success('✓')} Valid config ${muted(`· ${getPaths().configFile}`)}`);
|
|
142
|
+
write(muted(` ${Object.keys(config.providers).length} provider settings · ${Object.keys(config.customProviders).length} custom providers`));
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
write(`${danger('✗')} ${error instanceof Error ? error.message : String(error)}`);
|
|
147
|
+
if (error instanceof SurfError && error.hint)
|
|
148
|
+
write(muted(` ${error.hint}`));
|
|
149
|
+
return 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export async function configEditCommand() {
|
|
153
|
+
const paths = await ensurePaths();
|
|
154
|
+
try {
|
|
155
|
+
await stat(paths.configFile);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
await saveConfig(defaultConfig());
|
|
159
|
+
write(muted(`Created ${paths.configFile} with defaults.`));
|
|
160
|
+
}
|
|
161
|
+
const editor = process.env.VISUAL || process.env.EDITOR || (process.platform === 'win32' ? 'notepad' : 'vi');
|
|
162
|
+
const parts = editor.trim().split(/\s+/);
|
|
163
|
+
const command = parts[0] ?? 'vi';
|
|
164
|
+
const args = [...parts.slice(1), paths.configFile];
|
|
165
|
+
const code = await new Promise((resolvePromise, reject) => {
|
|
166
|
+
const child = spawn(command, args, { stdio: 'inherit' });
|
|
167
|
+
child.on('error', (error) => reject(new SurfError(`Could not open ${editor}`, {
|
|
168
|
+
hint: error.message
|
|
169
|
+
})));
|
|
170
|
+
child.on('close', (exitCode) => resolvePromise(exitCode));
|
|
171
|
+
});
|
|
172
|
+
if (code !== 0)
|
|
173
|
+
throw new SurfError(`The editor exited with code ${code}.`);
|
|
174
|
+
try {
|
|
175
|
+
await loadConfig();
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
write(warning(`The config was saved but is not valid yet: ${error instanceof Error ? error.message : String(error)}`));
|
|
179
|
+
return 1;
|
|
180
|
+
}
|
|
181
|
+
write(`${success('✓')} Config updated.`);
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
function parseValue(raw) {
|
|
185
|
+
const value = raw.trim();
|
|
186
|
+
if (value === '')
|
|
187
|
+
return '';
|
|
188
|
+
try {
|
|
189
|
+
return JSON.parse(value);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return raw;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function isSensitivePath(path) {
|
|
196
|
+
const last = path.at(-1) ?? '';
|
|
197
|
+
return /^(apiKey|api_key|authorization|token|secret|password|x-api-key)$/i.test(last) || path.includes('headers');
|
|
198
|
+
}
|
|
199
|
+
function formatValue(value) {
|
|
200
|
+
if (typeof value === 'string')
|
|
201
|
+
return JSON.stringify(value);
|
|
202
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
203
|
+
return String(value);
|
|
204
|
+
if (value === undefined)
|
|
205
|
+
return muted('(not set)');
|
|
206
|
+
return JSON.stringify(value);
|
|
207
|
+
}
|
|
208
|
+
function redact(config) {
|
|
209
|
+
return redactValue(config, undefined);
|
|
210
|
+
}
|
|
211
|
+
function redactValue(value, key) {
|
|
212
|
+
if (key && /^(apiKey|api_key|authorization|token|secret|password|x-api-key)$/i.test(key)) {
|
|
213
|
+
return value ? '<redacted>' : value;
|
|
214
|
+
}
|
|
215
|
+
if (key === 'headers' && value && typeof value === 'object') {
|
|
216
|
+
return Object.fromEntries(Object.entries(value).map(([name]) => [name, '<redacted>']));
|
|
217
|
+
}
|
|
218
|
+
if (Array.isArray(value))
|
|
219
|
+
return value.map((entry) => redactValue(entry));
|
|
220
|
+
if (value && typeof value === 'object') {
|
|
221
|
+
return Object.fromEntries(Object.entries(value).map(([name, entry]) => [
|
|
222
|
+
name,
|
|
223
|
+
redactValue(entry, name)
|
|
224
|
+
]));
|
|
225
|
+
}
|
|
226
|
+
return value;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline/promises';
|
|
2
|
+
import { runAgent } from '../core/agent.js';
|
|
3
|
+
import { resolveAgentWorkers } from '../core/agents.js';
|
|
4
|
+
import { discoverLocalModels, loadCatalog } from '../core/catalog.js';
|
|
5
|
+
import { loadConfig, updateConfigPath } from '../core/config.js';
|
|
6
|
+
import { activeEffort } from '../core/effort.js';
|
|
7
|
+
import { SurfError, errorMessage } from '../core/errors.js';
|
|
8
|
+
import { resolveSelection } from '../core/provider.js';
|
|
9
|
+
import { resolveSyncSettings, syncSessions } from '../core/sync.js';
|
|
10
|
+
import { addSessionUsage, createSession, latestSession, loadSession, saveSession } from '../core/session.js';
|
|
11
|
+
import { formatCost, formatTokens } from '../core/usage.js';
|
|
12
|
+
import { createTools } from '../tools/index.js';
|
|
13
|
+
import { danger, formatDuration, muted, oneLine, prepareStartup, safeText, success, warning, writeError } from './util.js';
|
|
14
|
+
const LOCAL_PROVIDERS = new Set(['ollama', 'llamacpp', 'vllm', 'lmstudio']);
|
|
15
|
+
export async function runHeadless(options) {
|
|
16
|
+
const json = Boolean(options.json);
|
|
17
|
+
const quiet = Boolean(options.quiet) || json;
|
|
18
|
+
const emit = (event) => {
|
|
19
|
+
if (json)
|
|
20
|
+
process.stdout.write(`${JSON.stringify(event)}\n`);
|
|
21
|
+
};
|
|
22
|
+
let session;
|
|
23
|
+
try {
|
|
24
|
+
const input = await resolvePrompt(options.prompt);
|
|
25
|
+
const config = await loadConfig();
|
|
26
|
+
const catalog = await loadCatalog(config);
|
|
27
|
+
if (options.session && options.continue) {
|
|
28
|
+
throw new SurfError('Choose either --session or --continue, not both.');
|
|
29
|
+
}
|
|
30
|
+
if (options.session) {
|
|
31
|
+
session = await loadSession(options.session);
|
|
32
|
+
if (!session) {
|
|
33
|
+
throw new SurfError(`Session not found: ${options.session}`, {
|
|
34
|
+
hint: 'Run `surf sessions` to list saved sessions.'
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (options.continue) {
|
|
39
|
+
session = await latestSession(options.cwd);
|
|
40
|
+
if (!session) {
|
|
41
|
+
throw new SurfError(`No saved sessions for ${options.cwd}`, {
|
|
42
|
+
hint: 'Run `surf` to start a new session.'
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (shouldDiscoverLocal(options, config)) {
|
|
47
|
+
await discoverLocalModels(catalog);
|
|
48
|
+
}
|
|
49
|
+
const startup = await prepareStartup({
|
|
50
|
+
config,
|
|
51
|
+
catalog,
|
|
52
|
+
provider: options.provider ?? session?.provider,
|
|
53
|
+
model: options.model ?? session?.model
|
|
54
|
+
});
|
|
55
|
+
if (startup.note && !quiet)
|
|
56
|
+
writeError(muted(startup.note));
|
|
57
|
+
const selection = await resolveSelection(catalog, startup.config, {
|
|
58
|
+
provider: startup.config.provider,
|
|
59
|
+
model: startup.config.model
|
|
60
|
+
});
|
|
61
|
+
const mode = options.plan ? 'plan' : (session?.mode ?? startup.config.mode);
|
|
62
|
+
const resumed = Boolean(session);
|
|
63
|
+
const activeSession = session ??
|
|
64
|
+
createSession({
|
|
65
|
+
cwd: options.cwd,
|
|
66
|
+
provider: selection.provider.id,
|
|
67
|
+
model: selection.model.id,
|
|
68
|
+
mode
|
|
69
|
+
});
|
|
70
|
+
session = {
|
|
71
|
+
...activeSession,
|
|
72
|
+
provider: selection.provider.id,
|
|
73
|
+
model: selection.model.id,
|
|
74
|
+
mode
|
|
75
|
+
};
|
|
76
|
+
emit({
|
|
77
|
+
type: 'session',
|
|
78
|
+
sessionId: session.id,
|
|
79
|
+
provider: selection.provider.id,
|
|
80
|
+
model: selection.model.id,
|
|
81
|
+
resumed
|
|
82
|
+
});
|
|
83
|
+
const permissions = { ...startup.config.permissions };
|
|
84
|
+
if (startup.config.fullAccess) {
|
|
85
|
+
for (const key of Object.keys(permissions)) {
|
|
86
|
+
permissions[key] = 'allow';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (options.yes) {
|
|
90
|
+
for (const key of Object.keys(permissions)) {
|
|
91
|
+
if (permissions[key] === 'ask')
|
|
92
|
+
permissions[key] = 'allow';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!options.yes && !process.stdin.isTTY && hasAskPermission(permissions) && !quiet) {
|
|
96
|
+
writeError(muted('note: permission prompts are unavailable here; use --yes to auto-approve tool actions.'));
|
|
97
|
+
}
|
|
98
|
+
const controller = new AbortController();
|
|
99
|
+
let interrupts = 0;
|
|
100
|
+
const onSigint = () => {
|
|
101
|
+
interrupts += 1;
|
|
102
|
+
if (interrupts === 1) {
|
|
103
|
+
controller.abort();
|
|
104
|
+
if (!quiet)
|
|
105
|
+
writeError(muted('stopping… (ctrl+c again to exit)'));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
process.exit(130);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const onSigterm = () => {
|
|
112
|
+
controller.abort();
|
|
113
|
+
process.exit(143);
|
|
114
|
+
};
|
|
115
|
+
process.on('SIGINT', onSigint);
|
|
116
|
+
process.on('SIGTERM', onSigterm);
|
|
117
|
+
const startedAt = Date.now();
|
|
118
|
+
let streamedText = '';
|
|
119
|
+
let lastUsage;
|
|
120
|
+
let permissionWarned = false;
|
|
121
|
+
let delegates = [];
|
|
122
|
+
if (startup.config.agents.enabled && startup.config.agents.workers.length > 0) {
|
|
123
|
+
const resolved = await resolveAgentWorkers(catalog, startup.config);
|
|
124
|
+
delegates = resolved.delegates;
|
|
125
|
+
if (!quiet && resolved.failures.length > 0) {
|
|
126
|
+
writeError(warning(`worker models skipped: ${resolved.failures.join('; ')}`));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const outcome = await runAgent({
|
|
131
|
+
cwd: options.cwd,
|
|
132
|
+
provider: selection.provider,
|
|
133
|
+
model: selection.model,
|
|
134
|
+
history: session.messages,
|
|
135
|
+
input,
|
|
136
|
+
mode,
|
|
137
|
+
tools: createTools(),
|
|
138
|
+
permissions,
|
|
139
|
+
maxSteps: options.maxSteps ?? startup.config.maxSteps,
|
|
140
|
+
maxTokens: options.maxTokens ??
|
|
141
|
+
startup.config.maxTokens ??
|
|
142
|
+
Math.min(selection.model.maxOutput || 8192, 32_768),
|
|
143
|
+
temperature: options.temperature ?? startup.config.temperature,
|
|
144
|
+
effort: activeEffort(options.effort ?? startup.config.effort),
|
|
145
|
+
showReasoning: Boolean(options.reasoning),
|
|
146
|
+
delegates,
|
|
147
|
+
allowOutsideWorkspace: startup.config.fullAccess || startup.config.allowOutsideWorkspace,
|
|
148
|
+
signal: controller.signal,
|
|
149
|
+
callbacks: {
|
|
150
|
+
onText(delta) {
|
|
151
|
+
streamedText += delta;
|
|
152
|
+
if (json)
|
|
153
|
+
emit({ type: 'text', delta });
|
|
154
|
+
else
|
|
155
|
+
process.stdout.write(delta);
|
|
156
|
+
},
|
|
157
|
+
onReasoning(delta) {
|
|
158
|
+
if (json && options.reasoning)
|
|
159
|
+
emit({ type: 'reasoning', delta });
|
|
160
|
+
else if (!json && options.reasoning)
|
|
161
|
+
process.stderr.write(muted(delta));
|
|
162
|
+
},
|
|
163
|
+
onToolStart(call, tool) {
|
|
164
|
+
if (json) {
|
|
165
|
+
emit({
|
|
166
|
+
type: 'tool_start',
|
|
167
|
+
id: call.id,
|
|
168
|
+
name: call.name,
|
|
169
|
+
arguments: call.arguments
|
|
170
|
+
});
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (quiet)
|
|
174
|
+
return;
|
|
175
|
+
const detail = toolDetail(call);
|
|
176
|
+
process.stderr.write(`\n${warning('◆')} ${tool?.name ?? call.name}${detail ? ` ${muted(detail)}` : ''}\n`);
|
|
177
|
+
},
|
|
178
|
+
onToolResult(call, result, durationMs) {
|
|
179
|
+
if (json) {
|
|
180
|
+
emit({
|
|
181
|
+
type: 'tool_result',
|
|
182
|
+
id: call.id,
|
|
183
|
+
name: call.name,
|
|
184
|
+
durationMs,
|
|
185
|
+
isError: Boolean(result.isError),
|
|
186
|
+
output: result.output
|
|
187
|
+
});
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (quiet)
|
|
191
|
+
return;
|
|
192
|
+
if (result.isError) {
|
|
193
|
+
process.stderr.write(` ${danger('✗')} ${oneLine(firstLine(result.output), 220)}\n`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
process.stderr.write(` ${success('✓')} ${muted(`${call.name} · ${formatDuration(durationMs)}`)}\n`);
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
onUsage(total) {
|
|
200
|
+
lastUsage = total;
|
|
201
|
+
if (json)
|
|
202
|
+
emit({ type: 'usage', usage: total });
|
|
203
|
+
},
|
|
204
|
+
async requestPermission(request) {
|
|
205
|
+
if (options.yes)
|
|
206
|
+
return 'allow';
|
|
207
|
+
if (!process.stdin.isTTY) {
|
|
208
|
+
if (!permissionWarned && !quiet) {
|
|
209
|
+
permissionWarned = true;
|
|
210
|
+
writeError(muted(`denied ${request.action}: no TTY for an approval prompt (use --yes to auto-approve).`));
|
|
211
|
+
}
|
|
212
|
+
return 'deny';
|
|
213
|
+
}
|
|
214
|
+
const decision = await askPermission(request);
|
|
215
|
+
if (decision === 'always')
|
|
216
|
+
permissions[request.action] = 'allow';
|
|
217
|
+
return decision;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
const nextSession = {
|
|
222
|
+
...session,
|
|
223
|
+
messages: outcome.messages,
|
|
224
|
+
usage: addSessionUsage(session.usage, outcome.usage)
|
|
225
|
+
};
|
|
226
|
+
session = nextSession;
|
|
227
|
+
if (options.save !== false) {
|
|
228
|
+
let saved = false;
|
|
229
|
+
try {
|
|
230
|
+
await saveSession(nextSession);
|
|
231
|
+
saved = true;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (!json)
|
|
235
|
+
writeError(warning(`Could not save session: ${errorMessage(error)}`));
|
|
236
|
+
}
|
|
237
|
+
if (saved) {
|
|
238
|
+
const sync = resolveSyncSettings(startup.config);
|
|
239
|
+
if (sync.enabled && sync.auto) {
|
|
240
|
+
try {
|
|
241
|
+
const result = await syncSessions({ config: startup.config, direction: 'push' });
|
|
242
|
+
await updateConfigPath(['sync', 'cursor'], result.cursor);
|
|
243
|
+
await updateConfigPath(['sync', 'lastSyncAt'], Date.now());
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
if (!json)
|
|
247
|
+
writeError(warning(`Could not sync session: ${errorMessage(error)}`));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (!json && streamedText && !streamedText.endsWith('\n'))
|
|
253
|
+
process.stdout.write('\n');
|
|
254
|
+
const durationMs = Date.now() - startedAt;
|
|
255
|
+
if (json) {
|
|
256
|
+
emit({
|
|
257
|
+
type: 'result',
|
|
258
|
+
text: streamedText,
|
|
259
|
+
usage: outcome.usage,
|
|
260
|
+
aborted: outcome.aborted,
|
|
261
|
+
sessionId: options.save === false ? undefined : nextSession.id,
|
|
262
|
+
durationMs
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
else if (!quiet) {
|
|
266
|
+
const usage = lastUsage ?? outcome.usage;
|
|
267
|
+
writeError(muted([
|
|
268
|
+
selection.provider.id,
|
|
269
|
+
selection.model.name,
|
|
270
|
+
`${formatTokens(usage.inputTokens)} in`,
|
|
271
|
+
`${formatTokens(usage.outputTokens)} out`,
|
|
272
|
+
formatCost(usage.cost),
|
|
273
|
+
formatDuration(durationMs),
|
|
274
|
+
options.save === false ? 'not saved' : nextSession.id
|
|
275
|
+
].join(' · ')));
|
|
276
|
+
if (outcome.aborted)
|
|
277
|
+
writeError(warning('stopped'));
|
|
278
|
+
}
|
|
279
|
+
return outcome.aborted ? 130 : 0;
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
process.off('SIGINT', onSigint);
|
|
283
|
+
process.off('SIGTERM', onSigterm);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
const message = errorMessage(error);
|
|
288
|
+
const hint = error instanceof SurfError ? error.hint : undefined;
|
|
289
|
+
if (json)
|
|
290
|
+
emit({ type: 'error', message, ...(hint ? { hint } : {}) });
|
|
291
|
+
else {
|
|
292
|
+
writeError(`${danger('error')} ${safeText(message)}`);
|
|
293
|
+
if (hint)
|
|
294
|
+
writeError(muted(` ${hint}`));
|
|
295
|
+
}
|
|
296
|
+
return error instanceof SurfError ? error.exitCode : 1;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
async function resolvePrompt(prompt) {
|
|
300
|
+
const given = prompt?.trim();
|
|
301
|
+
if (given && given !== '-')
|
|
302
|
+
return given;
|
|
303
|
+
if (process.stdin.isTTY && given !== '-') {
|
|
304
|
+
throw new SurfError('No prompt provided', {
|
|
305
|
+
hint: 'Pass a prompt, pipe text on stdin, or run `surf` for the interactive UI.'
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
const chunks = [];
|
|
309
|
+
for await (const chunk of process.stdin) {
|
|
310
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
311
|
+
}
|
|
312
|
+
const text = Buffer.concat(chunks).toString('utf8').trim();
|
|
313
|
+
if (!text) {
|
|
314
|
+
throw new SurfError('No prompt provided on stdin', {
|
|
315
|
+
hint: 'Example: echo "explain src/index.ts" | surf run'
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return text;
|
|
319
|
+
}
|
|
320
|
+
function hasAskPermission(permissions) {
|
|
321
|
+
return Object.values(permissions).some((value) => value === 'ask');
|
|
322
|
+
}
|
|
323
|
+
function shouldDiscoverLocal(options, config) {
|
|
324
|
+
const ids = [options.provider, config.provider].filter(Boolean);
|
|
325
|
+
if (ids.some((id) => LOCAL_PROVIDERS.has(id)))
|
|
326
|
+
return true;
|
|
327
|
+
return Object.values(config.providers).some((settings) => settings?.baseURL && /localhost|127\.0\.0\.1|0\.0\.0\.0|\[::1\]/i.test(settings.baseURL));
|
|
328
|
+
}
|
|
329
|
+
function toolDetail(call) {
|
|
330
|
+
const args = call.arguments;
|
|
331
|
+
const value = args.command ?? args.path ?? args.pattern ?? args.url ?? args.query ?? args.file ?? args.content;
|
|
332
|
+
return typeof value === 'string' ? oneLine(value.replace(/\n/g, ' '), 110) : '';
|
|
333
|
+
}
|
|
334
|
+
function firstLine(value) {
|
|
335
|
+
return value.split('\n').find((line) => line.trim()) ?? value;
|
|
336
|
+
}
|
|
337
|
+
async function askPermission(request) {
|
|
338
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
339
|
+
try {
|
|
340
|
+
const detail = request.detail ? `\n ${muted(oneLine(request.detail, 200))}` : '';
|
|
341
|
+
const risk = request.risk ? ` ${muted(`[${request.risk} risk]`)}` : '';
|
|
342
|
+
const answer = (await rl.question(`\n${warning('permission')} ${request.title}${risk}${detail}\n allow? [y]es / [a]lways / [n]o › `))
|
|
343
|
+
.trim()
|
|
344
|
+
.toLowerCase();
|
|
345
|
+
if (answer === 'a' || answer === 'always')
|
|
346
|
+
return 'always';
|
|
347
|
+
if (answer === 'y' || answer === 'yes' || answer === '')
|
|
348
|
+
return 'allow';
|
|
349
|
+
return 'deny';
|
|
350
|
+
}
|
|
351
|
+
finally {
|
|
352
|
+
rl.close();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"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"}
|