@equinor/fusion-framework-cli-plugin-copilot 2.0.2 → 2.0.3
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/CHANGELOG.md +10 -0
- package/dist/esm/commands/app/{session-logger.js → attach-session-logger.js} +16 -2
- package/dist/esm/commands/app/attach-session-logger.js.map +1 -0
- package/dist/esm/commands/app/{command.js → copilot-command.js} +22 -11
- package/dist/esm/commands/app/copilot-command.js.map +1 -0
- package/dist/esm/commands/app/{eval.js → create-session.js} +7 -5
- package/dist/esm/commands/app/create-session.js.map +1 -0
- package/dist/esm/commands/app/format-plan.js +24 -0
- package/dist/esm/commands/app/format-plan.js.map +1 -0
- package/dist/esm/commands/app/format-step-result.js +14 -0
- package/dist/esm/commands/app/format-step-result.js.map +1 -0
- package/dist/esm/commands/app/format-verdict.js +38 -0
- package/dist/esm/commands/app/format-verdict.js.map +1 -0
- package/dist/esm/commands/app/prompts/{system.dev-server.prompt.js → create-dev-server-context.js} +1 -1
- package/dist/esm/commands/app/prompts/create-dev-server-context.js.map +1 -0
- package/dist/esm/commands/app/prompts/{execute-step.prompt.js → create-execute-step-prompt.js} +1 -1
- package/dist/esm/commands/app/prompts/create-execute-step-prompt.js.map +1 -0
- package/dist/esm/commands/app/prompts/{judge.prompt.js → create-judge-prompt.js} +5 -1
- package/dist/esm/commands/app/prompts/create-judge-prompt.js.map +1 -0
- package/dist/esm/commands/app/prompts/{plan.prompt.js → create-plan-prompt.js} +1 -1
- package/dist/esm/commands/app/prompts/create-plan-prompt.js.map +1 -0
- package/dist/esm/commands/app/prompts/{step.prompt.js → create-step-prompt.js} +3 -2
- package/dist/esm/commands/app/prompts/create-step-prompt.js.map +1 -0
- package/dist/esm/commands/app/prompts/{system.prompt.js → create-system-prompt.js} +1 -1
- package/dist/esm/commands/app/prompts/create-system-prompt.js.map +1 -0
- package/dist/esm/commands/app/{login.js → run-login.js} +5 -1
- package/dist/esm/commands/app/run-login.js.map +1 -0
- package/dist/esm/commands/app/{server.js → start-app-server.js} +7 -1
- package/dist/esm/commands/app/start-app-server.js.map +1 -0
- package/dist/esm/commands/app/status-icon.js +18 -0
- package/dist/esm/commands/app/status-icon.js.map +1 -0
- package/dist/esm/commands/app/tools/{registry.js → AgentBrowserToolRegistry.js} +1 -1
- package/dist/esm/commands/app/tools/AgentBrowserToolRegistry.js.map +1 -0
- package/dist/esm/commands/app/tools/{write-file.js → create-append-file-tool.js} +5 -38
- package/dist/esm/commands/app/tools/create-append-file-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{click.js → create-click-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-click-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{errors.js → create-errors-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-errors-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{eval-js.js → create-eval-js-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-eval-js-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{fill.js → create-fill-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-fill-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{find.js → create-find-tool.js} +4 -1
- package/dist/esm/commands/app/tools/create-find-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{get-styles.js → create-get-styles-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-get-styles-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{get-url.js → create-get-url-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-get-url-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{go-back.js → create-go-back-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-go-back-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{hover.js → create-hover-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-hover-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{navigate.js → create-navigate-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-navigate-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{press-key.js → create-press-key-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-press-key-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{read-file.js → create-read-file-tool.js} +4 -2
- package/dist/esm/commands/app/tools/create-read-file-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{reload.js → create-reload-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-reload-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{screenshot.js → create-screenshot-tool.js} +7 -1
- package/dist/esm/commands/app/tools/create-screenshot-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{scroll.js → create-scroll-tool.js} +3 -1
- package/dist/esm/commands/app/tools/create-scroll-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{select.js → create-select-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-select-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{snapshot.js → create-snapshot-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-snapshot-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{type-text.js → create-type-text-tool.js} +1 -1
- package/dist/esm/commands/app/tools/create-type-text-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/{wait.js → create-wait-tool.js} +5 -1
- package/dist/esm/commands/app/tools/create-wait-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/create-write-file-tool.js +65 -0
- package/dist/esm/commands/app/tools/create-write-file-tool.js.map +1 -0
- package/dist/esm/commands/app/tools/index.js +19 -19
- package/dist/esm/commands/app/tools/index.js.map +1 -1
- package/dist/esm/commands/app/truncate.js +11 -0
- package/dist/esm/commands/app/truncate.js.map +1 -0
- package/dist/esm/commands/app/try-format-message.js +39 -0
- package/dist/esm/commands/app/try-format-message.js.map +1 -0
- package/dist/esm/exit-with-resolution-error.js +16 -0
- package/dist/esm/exit-with-resolution-error.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resolve-eval-command-input.js +37 -0
- package/dist/esm/resolve-eval-command-input.js.map +1 -0
- package/dist/esm/resolve-eval-files.js +49 -0
- package/dist/esm/resolve-eval-files.js.map +1 -0
- package/dist/esm/utils/ab-error-message.js +34 -0
- package/dist/esm/utils/ab-error-message.js.map +1 -0
- package/dist/esm/utils/{agent-browser.js → ab.js} +3 -32
- package/dist/esm/utils/ab.js.map +1 -0
- package/dist/esm/utils/create-run-dir.js +24 -0
- package/dist/esm/utils/create-run-dir.js.map +1 -0
- package/dist/esm/utils/{process.js → helpers.js} +28 -11
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/esm/utils/index.js +8 -5
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/{browser-poll.js → poll-console.js} +5 -3
- package/dist/esm/utils/poll-console.js.map +1 -0
- package/dist/esm/utils/{daemon.js → reset-daemon.js} +5 -14
- package/dist/esm/utils/reset-daemon.js.map +1 -0
- package/dist/esm/utils/resolve-app-key.js +20 -0
- package/dist/esm/utils/resolve-app-key.js.map +1 -0
- package/dist/esm/utils/wait-for-server.js +26 -0
- package/dist/esm/utils/wait-for-server.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/commands/app/format-plan.d.ts +8 -0
- package/dist/types/commands/app/format-step-result.d.ts +8 -0
- package/dist/types/commands/app/format-verdict.d.ts +8 -0
- package/dist/types/commands/app/prompts/{step.prompt.d.ts → create-step-prompt.d.ts} +1 -1
- package/dist/types/commands/app/status-icon.d.ts +8 -0
- package/dist/types/commands/app/tools/create-append-file-tool.d.ts +10 -0
- package/dist/types/commands/app/tools/{write-file.d.ts → create-write-file-tool.d.ts} +0 -9
- package/dist/types/commands/app/truncate.d.ts +8 -0
- package/dist/types/commands/app/try-format-message.d.ts +10 -0
- package/dist/types/exit-with-resolution-error.d.ts +8 -0
- package/dist/types/{eval-resolve.d.ts → resolve-eval-command-input.d.ts} +0 -8
- package/dist/types/resolve-eval-files.d.ts +8 -0
- package/dist/types/utils/ab-error-message.d.ts +11 -0
- package/dist/types/utils/{agent-browser.d.ts → ab.d.ts} +0 -13
- package/dist/types/utils/create-run-dir.d.ts +8 -0
- package/dist/types/utils/{process.d.ts → helpers.d.ts} +13 -6
- package/dist/types/utils/index.d.ts +8 -5
- package/dist/types/utils/{daemon.d.ts → reset-daemon.d.ts} +0 -5
- package/dist/types/utils/resolve-app-key.d.ts +9 -0
- package/dist/types/utils/wait-for-server.d.ts +9 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +4 -4
- package/src/commands/app/{session-logger.ts → attach-session-logger.ts} +15 -1
- package/src/commands/app/{command.ts → copilot-command.ts} +21 -12
- package/src/commands/app/{eval.ts → create-session.ts} +6 -4
- package/src/commands/app/format-plan.ts +26 -0
- package/src/commands/app/format-step-result.ts +16 -0
- package/src/commands/app/format-verdict.ts +43 -0
- package/src/commands/app/prompts/{judge.prompt.ts → create-judge-prompt.ts} +4 -0
- package/src/commands/app/prompts/{step.prompt.ts → create-step-prompt.ts} +2 -1
- package/src/commands/app/{login.ts → run-login.ts} +4 -0
- package/src/commands/app/{server.ts → start-app-server.ts} +6 -0
- package/src/commands/app/status-icon.ts +16 -0
- package/src/commands/app/tools/{write-file.ts → create-append-file-tool.ts} +4 -39
- package/src/commands/app/tools/{find.ts → create-find-tool.ts} +3 -0
- package/src/commands/app/tools/{read-file.ts → create-read-file-tool.ts} +3 -1
- package/src/commands/app/tools/{screenshot.ts → create-screenshot-tool.ts} +6 -0
- package/src/commands/app/tools/{scroll.ts → create-scroll-tool.ts} +2 -0
- package/src/commands/app/tools/{wait.ts → create-wait-tool.ts} +4 -0
- package/src/commands/app/tools/create-write-file-tool.ts +69 -0
- package/src/commands/app/tools/index.ts +19 -19
- package/src/commands/app/truncate.ts +10 -0
- package/src/commands/app/try-format-message.ts +42 -0
- package/src/exit-with-resolution-error.ts +15 -0
- package/src/index.ts +1 -1
- package/src/resolve-eval-command-input.ts +59 -0
- package/src/resolve-eval-files.ts +57 -0
- package/src/utils/ab-error-message.ts +31 -0
- package/src/utils/{agent-browser.ts → ab.ts} +2 -30
- package/src/utils/create-run-dir.ts +24 -0
- package/src/utils/{process.ts → helpers.ts} +28 -10
- package/src/utils/index.ts +8 -5
- package/src/utils/{browser-poll.ts → poll-console.ts} +4 -2
- package/src/utils/{daemon.ts → reset-daemon.ts} +4 -13
- package/src/utils/resolve-app-key.ts +20 -0
- package/src/utils/wait-for-server.ts +24 -0
- package/src/version.ts +1 -1
- package/dist/esm/commands/app/command.js.map +0 -1
- package/dist/esm/commands/app/eval.js.map +0 -1
- package/dist/esm/commands/app/format.js +0 -93
- package/dist/esm/commands/app/format.js.map +0 -1
- package/dist/esm/commands/app/login.js.map +0 -1
- package/dist/esm/commands/app/prompts/execute-step.prompt.js.map +0 -1
- package/dist/esm/commands/app/prompts/judge.prompt.js.map +0 -1
- package/dist/esm/commands/app/prompts/plan.prompt.js.map +0 -1
- package/dist/esm/commands/app/prompts/step.prompt.js.map +0 -1
- package/dist/esm/commands/app/prompts/system.dev-server.prompt.js.map +0 -1
- package/dist/esm/commands/app/prompts/system.prompt.js.map +0 -1
- package/dist/esm/commands/app/server.js.map +0 -1
- package/dist/esm/commands/app/session-logger.js.map +0 -1
- package/dist/esm/commands/app/tools/click.js.map +0 -1
- package/dist/esm/commands/app/tools/errors.js.map +0 -1
- package/dist/esm/commands/app/tools/eval-js.js.map +0 -1
- package/dist/esm/commands/app/tools/fill.js.map +0 -1
- package/dist/esm/commands/app/tools/find.js.map +0 -1
- package/dist/esm/commands/app/tools/get-styles.js.map +0 -1
- package/dist/esm/commands/app/tools/get-url.js.map +0 -1
- package/dist/esm/commands/app/tools/go-back.js.map +0 -1
- package/dist/esm/commands/app/tools/hover.js.map +0 -1
- package/dist/esm/commands/app/tools/navigate.js.map +0 -1
- package/dist/esm/commands/app/tools/press-key.js.map +0 -1
- package/dist/esm/commands/app/tools/read-file.js.map +0 -1
- package/dist/esm/commands/app/tools/registry.js.map +0 -1
- package/dist/esm/commands/app/tools/reload.js.map +0 -1
- package/dist/esm/commands/app/tools/screenshot.js.map +0 -1
- package/dist/esm/commands/app/tools/scroll.js.map +0 -1
- package/dist/esm/commands/app/tools/select.js.map +0 -1
- package/dist/esm/commands/app/tools/snapshot.js.map +0 -1
- package/dist/esm/commands/app/tools/type-text.js.map +0 -1
- package/dist/esm/commands/app/tools/wait.js.map +0 -1
- package/dist/esm/commands/app/tools/write-file.js.map +0 -1
- package/dist/esm/eval-resolve.js +0 -83
- package/dist/esm/eval-resolve.js.map +0 -1
- package/dist/esm/utils/agent-browser.js.map +0 -1
- package/dist/esm/utils/browser-poll.js.map +0 -1
- package/dist/esm/utils/daemon.js.map +0 -1
- package/dist/esm/utils/process.js.map +0 -1
- package/dist/esm/utils/server.js +0 -65
- package/dist/esm/utils/server.js.map +0 -1
- package/dist/types/commands/app/format.d.ts +0 -14
- package/dist/types/utils/server.d.ts +0 -26
- package/src/commands/app/format.ts +0 -110
- package/src/eval-resolve.ts +0 -113
- package/src/utils/server.ts +0 -66
- /package/dist/types/commands/app/{session-logger.d.ts → attach-session-logger.d.ts} +0 -0
- /package/dist/types/commands/app/{command.d.ts → copilot-command.d.ts} +0 -0
- /package/dist/types/commands/app/{eval.d.ts → create-session.d.ts} +0 -0
- /package/dist/types/commands/app/prompts/{system.dev-server.prompt.d.ts → create-dev-server-context.d.ts} +0 -0
- /package/dist/types/commands/app/prompts/{execute-step.prompt.d.ts → create-execute-step-prompt.d.ts} +0 -0
- /package/dist/types/commands/app/prompts/{judge.prompt.d.ts → create-judge-prompt.d.ts} +0 -0
- /package/dist/types/commands/app/prompts/{plan.prompt.d.ts → create-plan-prompt.d.ts} +0 -0
- /package/dist/types/commands/app/prompts/{system.prompt.d.ts → create-system-prompt.d.ts} +0 -0
- /package/dist/types/commands/app/{login.d.ts → run-login.d.ts} +0 -0
- /package/dist/types/commands/app/{server.d.ts → start-app-server.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{registry.d.ts → AgentBrowserToolRegistry.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{click.d.ts → create-click-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{errors.d.ts → create-errors-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{eval-js.d.ts → create-eval-js-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{fill.d.ts → create-fill-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{find.d.ts → create-find-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{get-styles.d.ts → create-get-styles-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{get-url.d.ts → create-get-url-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{go-back.d.ts → create-go-back-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{hover.d.ts → create-hover-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{navigate.d.ts → create-navigate-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{press-key.d.ts → create-press-key-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{read-file.d.ts → create-read-file-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{reload.d.ts → create-reload-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{screenshot.d.ts → create-screenshot-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{scroll.d.ts → create-scroll-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{select.d.ts → create-select-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{snapshot.d.ts → create-snapshot-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{type-text.d.ts → create-type-text-tool.d.ts} +0 -0
- /package/dist/types/commands/app/tools/{wait.d.ts → create-wait-tool.d.ts} +0 -0
- /package/dist/types/utils/{browser-poll.d.ts → poll-console.d.ts} +0 -0
- /package/src/commands/app/prompts/{system.dev-server.prompt.ts → create-dev-server-context.ts} +0 -0
- /package/src/commands/app/prompts/{execute-step.prompt.ts → create-execute-step-prompt.ts} +0 -0
- /package/src/commands/app/prompts/{plan.prompt.ts → create-plan-prompt.ts} +0 -0
- /package/src/commands/app/prompts/{system.prompt.ts → create-system-prompt.ts} +0 -0
- /package/src/commands/app/tools/{registry.ts → AgentBrowserToolRegistry.ts} +0 -0
- /package/src/commands/app/tools/{click.ts → create-click-tool.ts} +0 -0
- /package/src/commands/app/tools/{errors.ts → create-errors-tool.ts} +0 -0
- /package/src/commands/app/tools/{eval-js.ts → create-eval-js-tool.ts} +0 -0
- /package/src/commands/app/tools/{fill.ts → create-fill-tool.ts} +0 -0
- /package/src/commands/app/tools/{get-styles.ts → create-get-styles-tool.ts} +0 -0
- /package/src/commands/app/tools/{get-url.ts → create-get-url-tool.ts} +0 -0
- /package/src/commands/app/tools/{go-back.ts → create-go-back-tool.ts} +0 -0
- /package/src/commands/app/tools/{hover.ts → create-hover-tool.ts} +0 -0
- /package/src/commands/app/tools/{navigate.ts → create-navigate-tool.ts} +0 -0
- /package/src/commands/app/tools/{press-key.ts → create-press-key-tool.ts} +0 -0
- /package/src/commands/app/tools/{reload.ts → create-reload-tool.ts} +0 -0
- /package/src/commands/app/tools/{select.ts → create-select-tool.ts} +0 -0
- /package/src/commands/app/tools/{snapshot.ts → create-snapshot-tool.ts} +0 -0
- /package/src/commands/app/tools/{type-text.ts → create-type-text-tool.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/utils/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAEzE;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW;IACzB,8BAA8B;IAC9B,IAAI,CAAC;QACH,YAAY,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE;YACvC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;IAED,qEAAqE;IACrE,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QACD,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC;QACH,QAAQ,CAAC,kDAAkD,EAAE;YAC3D,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,uDAAuD;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,EAAE,CAAC,CAAC,MAAM,EAAE,sDAAsD,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/utils/process.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAmB;IACzC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,2FAA2F;IAC3F,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/esm/utils/server.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { mkdirSync } from 'node:fs';
|
|
3
|
-
import { join, relative, resolve } from 'node:path';
|
|
4
|
-
import { sleep } from './process.js';
|
|
5
|
-
/**
|
|
6
|
-
* Creates a timestamped, run-specific output directory for eval artifacts.
|
|
7
|
-
*
|
|
8
|
-
* @param title - Human label used as the directory name prefix (slugified)
|
|
9
|
-
* @param baseDir - Optional parent directory override
|
|
10
|
-
* @returns Absolute path to the newly created directory
|
|
11
|
-
*/
|
|
12
|
-
export function createRunDir(title, baseDir) {
|
|
13
|
-
const now = new Date();
|
|
14
|
-
const time = [now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()]
|
|
15
|
-
.map((n) => String(n).padStart(2, '0'))
|
|
16
|
-
.join('');
|
|
17
|
-
const ms = String(now.getUTCMilliseconds()).padStart(3, '0');
|
|
18
|
-
const slug = title.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-');
|
|
19
|
-
const parent = baseDir ? resolve(baseDir) : resolve('.tmp', 'copilot');
|
|
20
|
-
const dir = join(parent, `${slug}_${time}${ms}`);
|
|
21
|
-
mkdirSync(dir, { recursive: true });
|
|
22
|
-
console.log(`📁 Run dir: ${relative(process.cwd(), dir)}`);
|
|
23
|
-
return dir;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Resolves the Fusion `appKey` by running `ffc app manifest --silent`
|
|
27
|
-
* in the given application directory and parsing the JSON output.
|
|
28
|
-
*
|
|
29
|
-
* @param appDir - Absolute path to the Fusion application
|
|
30
|
-
* @returns The `appKey` string from the manifest
|
|
31
|
-
* @throws {Error} When `ffc app manifest` fails or returns invalid JSON
|
|
32
|
-
*/
|
|
33
|
-
export function resolveAppKey(appDir) {
|
|
34
|
-
const output = execFileSync('ffc', ['app', 'manifest', '--silent'], {
|
|
35
|
-
cwd: appDir,
|
|
36
|
-
encoding: 'utf-8',
|
|
37
|
-
timeout: 30_000,
|
|
38
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
39
|
-
});
|
|
40
|
-
const manifest = JSON.parse(output);
|
|
41
|
-
return manifest.appKey;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Polls a server URL until it responds with a non-5xx status or the
|
|
45
|
-
* timeout is reached.
|
|
46
|
-
*
|
|
47
|
-
* @param url - The URL to poll (e.g. `http://localhost:3000`)
|
|
48
|
-
* @param timeoutSeconds - Maximum number of seconds to wait
|
|
49
|
-
* @returns `true` if the server responded before timeout, `false` otherwise
|
|
50
|
-
*/
|
|
51
|
-
export async function waitForServer(url, timeoutSeconds) {
|
|
52
|
-
for (let i = 0; i < timeoutSeconds; i++) {
|
|
53
|
-
try {
|
|
54
|
-
const res = await fetch(url, { signal: AbortSignal.timeout(2000) });
|
|
55
|
-
if (res.ok || res.status < 500)
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
// Server not ready yet — retry
|
|
60
|
-
}
|
|
61
|
-
await sleep(1000);
|
|
62
|
-
}
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/utils/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAgB;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;SACvE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACtC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;QAClE,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAuB,CAAC;IAC1D,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,cAAsB;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;gBAAE,OAAO,IAAI,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Plan, StepResult, Verdict } from './types.js';
|
|
2
|
-
/** Renders a structured plan as a human-readable summary. */
|
|
3
|
-
export declare function formatPlan(plan: Plan): string;
|
|
4
|
-
/** Renders a single step execution result. */
|
|
5
|
-
export declare function formatStepResult(result: StepResult): string;
|
|
6
|
-
/** Renders the final verdict as a full-width coloured report. */
|
|
7
|
-
export declare function formatVerdict(verdict: Verdict): string;
|
|
8
|
-
/**
|
|
9
|
-
* Attempts to detect the JSON shape of an assistant message and format it.
|
|
10
|
-
*
|
|
11
|
-
* Returns `null` when the content is not a recognised structure, so the
|
|
12
|
-
* caller can fall back to plain-text rendering.
|
|
13
|
-
*/
|
|
14
|
-
export declare function tryFormatMessage(content: string): string | null;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a timestamped, run-specific output directory for eval artifacts.
|
|
3
|
-
*
|
|
4
|
-
* @param title - Human label used as the directory name prefix (slugified)
|
|
5
|
-
* @param baseDir - Optional parent directory override
|
|
6
|
-
* @returns Absolute path to the newly created directory
|
|
7
|
-
*/
|
|
8
|
-
export declare function createRunDir(title: string, baseDir?: string): string;
|
|
9
|
-
/**
|
|
10
|
-
* Resolves the Fusion `appKey` by running `ffc app manifest --silent`
|
|
11
|
-
* in the given application directory and parsing the JSON output.
|
|
12
|
-
*
|
|
13
|
-
* @param appDir - Absolute path to the Fusion application
|
|
14
|
-
* @returns The `appKey` string from the manifest
|
|
15
|
-
* @throws {Error} When `ffc app manifest` fails or returns invalid JSON
|
|
16
|
-
*/
|
|
17
|
-
export declare function resolveAppKey(appDir: string): string;
|
|
18
|
-
/**
|
|
19
|
-
* Polls a server URL until it responds with a non-5xx status or the
|
|
20
|
-
* timeout is reached.
|
|
21
|
-
*
|
|
22
|
-
* @param url - The URL to poll (e.g. `http://localhost:3000`)
|
|
23
|
-
* @param timeoutSeconds - Maximum number of seconds to wait
|
|
24
|
-
* @returns `true` if the server responded before timeout, `false` otherwise
|
|
25
|
-
*/
|
|
26
|
-
export declare function waitForServer(url: string, timeoutSeconds: number): Promise<boolean>;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
|
|
3
|
-
import type { Plan, StepResult, Verdict } from './types.js';
|
|
4
|
-
|
|
5
|
-
// ── Plan ────────────────────────────────────────────────────────────────────
|
|
6
|
-
|
|
7
|
-
/** Renders a structured plan as a human-readable summary. */
|
|
8
|
-
export function formatPlan(plan: Plan): string {
|
|
9
|
-
const lines = [
|
|
10
|
-
'',
|
|
11
|
-
chalk.bold(`📋 ${plan.summary}`),
|
|
12
|
-
'',
|
|
13
|
-
...plan.steps.flatMap((s, si) => [
|
|
14
|
-
` ${chalk.dim(`${si + 1}.`)} ${s.scenario}`,
|
|
15
|
-
...s.criteria.map((c) => chalk.dim(` • ${truncate(c, 70)}`)),
|
|
16
|
-
]),
|
|
17
|
-
'',
|
|
18
|
-
];
|
|
19
|
-
return lines.join('\n');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// ── Step result (execution line) ────────────────────────────────────────────
|
|
23
|
-
|
|
24
|
-
/** Renders a single step execution result. */
|
|
25
|
-
export function formatStepResult(result: StepResult): string {
|
|
26
|
-
const icon = statusIcon(result.ok);
|
|
27
|
-
const files = result.evidence.length ? chalk.dim(` [${result.evidence.join(', ')}]`) : '';
|
|
28
|
-
return ` ${icon} ${result.criterion}\n${chalk.dim(` ${result.note}`)}${files}`;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// ── Verdict ─────────────────────────────────────────────────────────────────
|
|
32
|
-
|
|
33
|
-
/** Renders the final verdict as a full-width coloured report. */
|
|
34
|
-
export function formatVerdict(verdict: Verdict): string {
|
|
35
|
-
const bar = '═'.repeat(60);
|
|
36
|
-
const banner = verdict.pass
|
|
37
|
-
? chalk.bgGreen.black.bold(' ✅ PASS ')
|
|
38
|
-
: chalk.bgRed.white.bold(' ❌ FAIL ');
|
|
39
|
-
|
|
40
|
-
const lines = [
|
|
41
|
-
'',
|
|
42
|
-
bar,
|
|
43
|
-
` ${banner}`,
|
|
44
|
-
bar,
|
|
45
|
-
'',
|
|
46
|
-
...verdict.steps.map(
|
|
47
|
-
(s) => ` ${statusIcon(s.ok)} ${s.criterion}\n${chalk.dim(` ${s.note}`)}`,
|
|
48
|
-
),
|
|
49
|
-
'',
|
|
50
|
-
chalk.dim(` ${verdict.reasoning}`),
|
|
51
|
-
'',
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
if (verdict.ux && verdict.ux.length > 0) {
|
|
55
|
-
lines.push(chalk.bold(' 💡 UX Feedback'), '');
|
|
56
|
-
for (const hint of verdict.ux) {
|
|
57
|
-
lines.push(chalk.yellow(` • ${hint}`));
|
|
58
|
-
}
|
|
59
|
-
lines.push('');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return lines.join('\n');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// ── Dispatcher ──────────────────────────────────────────────────────────────
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Attempts to detect the JSON shape of an assistant message and format it.
|
|
69
|
-
*
|
|
70
|
-
* Returns `null` when the content is not a recognised structure, so the
|
|
71
|
-
* caller can fall back to plain-text rendering.
|
|
72
|
-
*/
|
|
73
|
-
export function tryFormatMessage(content: string): string | null {
|
|
74
|
-
let parsed: unknown;
|
|
75
|
-
try {
|
|
76
|
-
parsed = JSON.parse(content.trim());
|
|
77
|
-
} catch {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
if (!parsed || typeof parsed !== 'object') return null;
|
|
81
|
-
|
|
82
|
-
// Verdict: { pass, reasoning, steps[] }
|
|
83
|
-
if ('pass' in parsed && 'steps' in parsed && Array.isArray((parsed as Verdict).steps)) {
|
|
84
|
-
return formatVerdict(parsed as Verdict);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Plan: { summary, steps[] }
|
|
88
|
-
if ('summary' in parsed && 'steps' in parsed && Array.isArray((parsed as Plan).steps)) {
|
|
89
|
-
return formatPlan(parsed as Plan);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Step result: { criterion, ok, note }
|
|
93
|
-
if ('criterion' in parsed && 'ok' in parsed && 'note' in parsed) {
|
|
94
|
-
return formatStepResult(parsed as StepResult);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
101
|
-
|
|
102
|
-
function statusIcon(ok: boolean | string): string {
|
|
103
|
-
if (ok === true) return chalk.green('✔');
|
|
104
|
-
if (ok === false) return chalk.red('✖');
|
|
105
|
-
return chalk.yellow('⚠'); // "blocked", "flaky", etc.
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function truncate(str: string, max: number): string {
|
|
109
|
-
return str.length > max ? `${str.slice(0, max - 1)}…` : str;
|
|
110
|
-
}
|
package/src/eval-resolve.ts
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
-
import { basename, dirname, extname, isAbsolute, join, resolve } from 'node:path';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Normalized positional input for the `copilot app eval` command.
|
|
6
|
-
*
|
|
7
|
-
* When the user passes an application directory, `evalFile` is undefined.
|
|
8
|
-
* When the user passes a direct `eval/*.md` file path, `appPath` is derived
|
|
9
|
-
* from the file location and `evalFile` points to the selected markdown file.
|
|
10
|
-
*/
|
|
11
|
-
export interface EvalCommandInput {
|
|
12
|
-
/** Absolute path to the Fusion application directory. */
|
|
13
|
-
appPath: string;
|
|
14
|
-
/** Optional absolute path to the directly selected eval markdown file. */
|
|
15
|
-
evalFile?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Prints a CLI resolution error and exits the current process.
|
|
20
|
-
*
|
|
21
|
-
* @param message - Primary error message.
|
|
22
|
-
* @param detail - Optional follow-up detail shown on the next line.
|
|
23
|
-
* @returns This function never returns because the process exits.
|
|
24
|
-
*/
|
|
25
|
-
function exitWithResolutionError(message: string, detail?: string): never {
|
|
26
|
-
console.error(`❌ ${message}`);
|
|
27
|
-
if (detail) {
|
|
28
|
-
console.error(` ${detail}`);
|
|
29
|
-
}
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Resolves the positional `copilot app eval` argument.
|
|
35
|
-
*
|
|
36
|
-
* Supports both application directory paths and direct paths to markdown files
|
|
37
|
-
* inside an application's `eval/` directory.
|
|
38
|
-
*
|
|
39
|
-
* @param inputPath - Positional CLI argument passed to the eval command.
|
|
40
|
-
* @returns Normalized application path and optional direct eval file path.
|
|
41
|
-
*/
|
|
42
|
-
export function resolveEvalCommandInput(inputPath: string): EvalCommandInput {
|
|
43
|
-
const absInput = resolve(inputPath);
|
|
44
|
-
|
|
45
|
-
if (extname(absInput) !== '.md') {
|
|
46
|
-
return { appPath: absInput };
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (!existsSync(absInput)) {
|
|
50
|
-
exitWithResolutionError(`Eval file not found: ${absInput}`);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (!statSync(absInput).isFile()) {
|
|
54
|
-
exitWithResolutionError(`Eval path is not a file: ${absInput}`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const evalDir = dirname(absInput);
|
|
58
|
-
if (basename(evalDir) !== 'eval') {
|
|
59
|
-
exitWithResolutionError(
|
|
60
|
-
`Direct eval file path must point to a markdown file inside an eval directory: ${absInput}`,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return {
|
|
65
|
-
appPath: dirname(evalDir),
|
|
66
|
-
evalFile: absInput,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Resolves eval markdown files for a Fusion application.
|
|
72
|
-
*
|
|
73
|
-
* @param appPath - Path to the Fusion application directory
|
|
74
|
-
* @param evalOpt - Value of the `--eval` CLI option (name, path, or `undefined`)
|
|
75
|
-
* @returns Array of absolute paths to eval markdown files
|
|
76
|
-
*/
|
|
77
|
-
export function resolveEvalFiles(appPath: string, evalOpt?: string): string[] {
|
|
78
|
-
const absApp = resolve(appPath);
|
|
79
|
-
|
|
80
|
-
if (!evalOpt) {
|
|
81
|
-
const evalDir = join(absApp, 'eval');
|
|
82
|
-
if (!existsSync(evalDir)) {
|
|
83
|
-
exitWithResolutionError(
|
|
84
|
-
`No eval directory found at ${evalDir}`,
|
|
85
|
-
'Create eval/*.md files or use --eval <file>',
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
const files = readdirSync(evalDir)
|
|
89
|
-
.filter((f) => f.endsWith('.md'))
|
|
90
|
-
.sort()
|
|
91
|
-
.map((f) => join(evalDir, f));
|
|
92
|
-
|
|
93
|
-
if (files.length === 0) {
|
|
94
|
-
exitWithResolutionError(`No .md files found in ${evalDir}`);
|
|
95
|
-
}
|
|
96
|
-
return files;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (isAbsolute(evalOpt) || evalOpt.includes('/') || evalOpt.includes('\\')) {
|
|
100
|
-
const absPath = isAbsolute(evalOpt) ? evalOpt : resolve(evalOpt);
|
|
101
|
-
if (!existsSync(absPath)) {
|
|
102
|
-
exitWithResolutionError(`Eval file not found: ${absPath}`);
|
|
103
|
-
}
|
|
104
|
-
return [absPath];
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const evalFileName = extname(evalOpt) === '.md' ? evalOpt : `${evalOpt}.md`;
|
|
108
|
-
const evalFile = join(absApp, 'eval', evalFileName);
|
|
109
|
-
if (!existsSync(evalFile)) {
|
|
110
|
-
exitWithResolutionError(`Eval file not found: ${evalFile}`);
|
|
111
|
-
}
|
|
112
|
-
return [evalFile];
|
|
113
|
-
}
|
package/src/utils/server.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { mkdirSync } from 'node:fs';
|
|
3
|
-
import { join, relative, resolve } from 'node:path';
|
|
4
|
-
|
|
5
|
-
import { sleep } from './process.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Creates a timestamped, run-specific output directory for eval artifacts.
|
|
9
|
-
*
|
|
10
|
-
* @param title - Human label used as the directory name prefix (slugified)
|
|
11
|
-
* @param baseDir - Optional parent directory override
|
|
12
|
-
* @returns Absolute path to the newly created directory
|
|
13
|
-
*/
|
|
14
|
-
export function createRunDir(title: string, baseDir?: string): string {
|
|
15
|
-
const now = new Date();
|
|
16
|
-
const time = [now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()]
|
|
17
|
-
.map((n) => String(n).padStart(2, '0'))
|
|
18
|
-
.join('');
|
|
19
|
-
const ms = String(now.getUTCMilliseconds()).padStart(3, '0');
|
|
20
|
-
const slug = title.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-');
|
|
21
|
-
const parent = baseDir ? resolve(baseDir) : resolve('.tmp', 'copilot');
|
|
22
|
-
const dir = join(parent, `${slug}_${time}${ms}`);
|
|
23
|
-
mkdirSync(dir, { recursive: true });
|
|
24
|
-
console.log(`📁 Run dir: ${relative(process.cwd(), dir)}`);
|
|
25
|
-
return dir;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Resolves the Fusion `appKey` by running `ffc app manifest --silent`
|
|
30
|
-
* in the given application directory and parsing the JSON output.
|
|
31
|
-
*
|
|
32
|
-
* @param appDir - Absolute path to the Fusion application
|
|
33
|
-
* @returns The `appKey` string from the manifest
|
|
34
|
-
* @throws {Error} When `ffc app manifest` fails or returns invalid JSON
|
|
35
|
-
*/
|
|
36
|
-
export function resolveAppKey(appDir: string): string {
|
|
37
|
-
const output = execFileSync('ffc', ['app', 'manifest', '--silent'], {
|
|
38
|
-
cwd: appDir,
|
|
39
|
-
encoding: 'utf-8',
|
|
40
|
-
timeout: 30_000,
|
|
41
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
42
|
-
});
|
|
43
|
-
const manifest = JSON.parse(output) as { appKey: string };
|
|
44
|
-
return manifest.appKey;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Polls a server URL until it responds with a non-5xx status or the
|
|
49
|
-
* timeout is reached.
|
|
50
|
-
*
|
|
51
|
-
* @param url - The URL to poll (e.g. `http://localhost:3000`)
|
|
52
|
-
* @param timeoutSeconds - Maximum number of seconds to wait
|
|
53
|
-
* @returns `true` if the server responded before timeout, `false` otherwise
|
|
54
|
-
*/
|
|
55
|
-
export async function waitForServer(url: string, timeoutSeconds: number): Promise<boolean> {
|
|
56
|
-
for (let i = 0; i < timeoutSeconds; i++) {
|
|
57
|
-
try {
|
|
58
|
-
const res = await fetch(url, { signal: AbortSignal.timeout(2000) });
|
|
59
|
-
if (res.ok || res.status < 500) return true;
|
|
60
|
-
} catch {
|
|
61
|
-
// Server not ready yet — retry
|
|
62
|
-
}
|
|
63
|
-
await sleep(1000);
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/commands/app/prompts/{system.dev-server.prompt.ts → create-dev-server-context.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|