@shepai/cli 1.119.0 → 1.120.0-pr360.cadec27
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/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +10 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +11 -6
- package/dist/src/presentation/cli/commands/install.command.js +8 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +2 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +8 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +8 -3
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_aeb74a70._.js → _7af11139._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_aeb74a70._.js.map → _7af11139._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_ab069e13._.js +1 -1
- package/web/.next/server/chunks/ssr/_ab069e13._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_bed4bbb9._.js → _dc7b6354._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_bed4bbb9._.js.map → _dc7b6354._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_fa4c39d3._.js +3 -0
- package/web/.next/server/chunks/ssr/{_59ae996e._.js.map → _fa4c39d3._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +33 -33
- package/web/.next/static/chunks/{1c5310cfde612b81.js → 0734c9c254ffe48f.js} +1 -1
- package/web/.next/static/chunks/{ed113fb744f2e4d8.js → 1519bd8bfeefe6d7.js} +1 -1
- package/web/.next/static/chunks/65c62b10c8ae1559.js +2 -0
- package/web/.next/static/chunks/{619af41a8d3232e5.js → 71161130b2462279.js} +1 -1
- package/web/.next/static/chunks/{c4477c532d2081e8.js → b86009f50b8547fc.js} +1 -1
- package/web/.next/static/chunks/{2b35632c1b784fae.js → bb7a6b49e492e91d.js} +1 -1
- package/web/.next/static/chunks/{7c57a9143e66868c.js → c1d5418605c0d3c2.js} +2 -2
- package/web/.next/static/chunks/{c1a6934d2281c088.js → e91a13da1d85f65d.js} +1 -1
- package/web/.next/static/chunks/{30097f88cdf8fad8.js → f22fb5583e3f73c2.js} +1 -1
- package/web/.next/static/chunks/{69c6d3ba1606e98d.js → fbcb8f629d51c883.js} +1 -1
- package/web/.next/static/chunks/{f3c4a7bb76c69b01.js → fd0c3566818fc69a.js} +1 -1
- package/web/.next/server/chunks/ssr/_59ae996e._.js +0 -3
- package/web/.next/static/chunks/3678617c34576e18.js +0 -2
- /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → Nj697Fdl9C9FmHjZiFrN4}/_buildManifest.js +0 -0
- /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → Nj697Fdl9C9FmHjZiFrN4}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → Nj697Fdl9C9FmHjZiFrN4}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAwFlC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js
CHANGED
|
@@ -107,9 +107,14 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
107
107
|
}
|
|
108
108
|
return new Promise((resolve) => {
|
|
109
109
|
let output = '';
|
|
110
|
+
// Inherit stdin when running in an interactive terminal so that commands
|
|
111
|
+
// requiring sudo can prompt the user for a password. In non-interactive
|
|
112
|
+
// contexts (web UI, CI) stdin is piped and closed immediately to prevent
|
|
113
|
+
// the process from hanging waiting for input.
|
|
114
|
+
const isInteractive = process.stdin.isTTY === true;
|
|
110
115
|
const child = spawn(installCommand.command, [], {
|
|
111
116
|
shell: true,
|
|
112
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
|
+
stdio: [isInteractive ? 'inherit' : 'pipe', 'pipe', 'pipe'],
|
|
113
118
|
env: {
|
|
114
119
|
...process.env,
|
|
115
120
|
DEBIAN_FRONTEND: 'noninteractive',
|
|
@@ -117,8 +122,10 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
117
122
|
GPG_TTY: '',
|
|
118
123
|
},
|
|
119
124
|
});
|
|
120
|
-
// Close stdin
|
|
121
|
-
|
|
125
|
+
// Close stdin in non-interactive mode to prevent prompts from hanging
|
|
126
|
+
if (!isInteractive) {
|
|
127
|
+
child.stdin?.end();
|
|
128
|
+
}
|
|
122
129
|
// Stream output from stdout and stderr
|
|
123
130
|
const pipeOutput = (stream) => {
|
|
124
131
|
if (!stream)
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json
CHANGED
|
@@ -8,17 +8,21 @@
|
|
|
8
8
|
"platforms": ["linux", "darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/claude",
|
|
10
10
|
"binary": "claude",
|
|
11
|
-
"packageManager": "
|
|
11
|
+
"packageManager": "npm",
|
|
12
12
|
"commands": {
|
|
13
|
-
"linux": "
|
|
14
|
-
"darwin": "
|
|
13
|
+
"linux": "npm install -g @anthropic-ai/claude-code",
|
|
14
|
+
"darwin": "npm install -g @anthropic-ai/claude-code",
|
|
15
15
|
"win32": "npm install -g @anthropic-ai/claude-code"
|
|
16
16
|
},
|
|
17
17
|
"timeout": 300000,
|
|
18
|
-
"documentationUrl": "https://
|
|
18
|
+
"documentationUrl": "https://docs.anthropic.com/en/docs/claude-code/overview",
|
|
19
19
|
"verifyCommand": "claude --version",
|
|
20
20
|
"autoInstall": true,
|
|
21
|
-
"openDirectory":
|
|
21
|
+
"openDirectory": {
|
|
22
|
+
"linux": "cd {dir} && exec claude",
|
|
23
|
+
"darwin": "cd {dir} && exec claude",
|
|
24
|
+
"win32": "cd /d {dir} && claude"
|
|
25
|
+
},
|
|
22
26
|
"spawnOptions": {
|
|
23
27
|
"shell": true,
|
|
24
28
|
"stdio": "inherit",
|
|
@@ -26,6 +30,7 @@
|
|
|
26
30
|
},
|
|
27
31
|
"terminalCommand": {
|
|
28
32
|
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec claude'",
|
|
29
|
-
"darwin": "
|
|
33
|
+
"darwin": "osascript -e 'tell application \"Terminal\" to do script \"cd {dir} && exec claude\"'",
|
|
34
|
+
"win32": "start cmd /k \"cd /d {dir} && claude\""
|
|
30
35
|
}
|
|
31
36
|
}
|
|
@@ -117,7 +117,14 @@ function printInstallInstructions(metadata) {
|
|
|
117
117
|
// Print open directory command if available
|
|
118
118
|
if (metadata.openDirectory) {
|
|
119
119
|
console.log(fmt.heading('Open Directory'));
|
|
120
|
-
|
|
120
|
+
if (typeof metadata.openDirectory === 'string') {
|
|
121
|
+
console.log(`${colors.muted('$')} ${metadata.openDirectory}`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
for (const [platform, cmd] of Object.entries(metadata.openDirectory)) {
|
|
125
|
+
console.log(`${colors.muted(`[${platform}]`)} ${cmd}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
121
128
|
console.log();
|
|
122
129
|
}
|
|
123
130
|
// Print documentation link
|
|
@@ -10,6 +10,8 @@ export interface AgentAuthStatus {
|
|
|
10
10
|
binaryName: string | null;
|
|
11
11
|
/** Instructions to authenticate if not authenticated */
|
|
12
12
|
authCommand: string | null;
|
|
13
|
+
/** Platform-resolved install command (e.g. "npm install -g @google/gemini-cli") */
|
|
14
|
+
installCommand: string | null;
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* Check agent tool installation + auth status.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mFAAmF;IACnF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AA4FD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAwF/D"}
|
|
@@ -20,7 +20,7 @@ const AGENT_TOOL_MAP = {
|
|
|
20
20
|
};
|
|
21
21
|
const AGENT_BINARY_MAP = {
|
|
22
22
|
'claude-code': 'claude',
|
|
23
|
-
cursor: 'agent',
|
|
23
|
+
cursor: 'cursor-agent',
|
|
24
24
|
'gemini-cli': 'gemini',
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
@@ -113,6 +113,7 @@ export async function checkAgentAuth() {
|
|
|
113
113
|
label: 'Unknown',
|
|
114
114
|
binaryName: null,
|
|
115
115
|
authCommand: null,
|
|
116
|
+
installCommand: null,
|
|
116
117
|
};
|
|
117
118
|
}
|
|
118
119
|
const label = AGENT_LABELS[agentType] ?? agentType;
|
|
@@ -127,15 +128,18 @@ export async function checkAgentAuth() {
|
|
|
127
128
|
label,
|
|
128
129
|
binaryName: null,
|
|
129
130
|
authCommand: null,
|
|
131
|
+
installCommand: null,
|
|
130
132
|
};
|
|
131
133
|
}
|
|
132
134
|
// Check if tool is installed
|
|
133
135
|
let installed = false;
|
|
136
|
+
let installCommand = null;
|
|
134
137
|
try {
|
|
135
138
|
const useCase = resolve('ListToolsUseCase');
|
|
136
139
|
const tools = await useCase.execute();
|
|
137
140
|
const tool = tools.find((t) => t.id === toolId);
|
|
138
141
|
installed = tool?.status.status === 'available';
|
|
142
|
+
installCommand = tool?.installCommand ?? null;
|
|
139
143
|
}
|
|
140
144
|
catch {
|
|
141
145
|
installed = false;
|
|
@@ -148,6 +152,7 @@ export async function checkAgentAuth() {
|
|
|
148
152
|
label,
|
|
149
153
|
binaryName,
|
|
150
154
|
authCommand: binaryName ? `Install ${label} first` : null,
|
|
155
|
+
installCommand,
|
|
151
156
|
};
|
|
152
157
|
}
|
|
153
158
|
// Tier 1: instant file/env check
|
|
@@ -160,6 +165,7 @@ export async function checkAgentAuth() {
|
|
|
160
165
|
label,
|
|
161
166
|
binaryName,
|
|
162
167
|
authCommand: binaryName,
|
|
168
|
+
installCommand,
|
|
163
169
|
};
|
|
164
170
|
}
|
|
165
171
|
// Tier 2: subprocess verify (best effort, ~200ms)
|
|
@@ -174,5 +180,6 @@ export async function checkAgentAuth() {
|
|
|
174
180
|
label,
|
|
175
181
|
binaryName,
|
|
176
182
|
authCommand: authenticated ? null : binaryName,
|
|
183
|
+
installCommand,
|
|
177
184
|
};
|
|
178
185
|
}
|
package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js
CHANGED
|
@@ -70,7 +70,7 @@ function AgentAuthBanner({ status, onRetry, }) {
|
|
|
70
70
|
}
|
|
71
71
|
// Not installed
|
|
72
72
|
if (!status.installed) {
|
|
73
|
-
return (_jsxs("div", { className: "flex w-full flex-col gap-2 rounded-md bg-amber-500/10 px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-3 w-3 text-amber-600 dark:text-amber-400" }), _jsxs("span", { className: "text-[10px] font-medium text-amber-700 dark:text-amber-300", children: [status.label, " not installed"] })] }), status.
|
|
73
|
+
return (_jsxs("div", { className: "flex w-full flex-col gap-2 rounded-md bg-amber-500/10 px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-3 w-3 text-amber-600 dark:text-amber-400" }), _jsxs("span", { className: "text-[10px] font-medium text-amber-700 dark:text-amber-300", children: [status.label, " not installed"] })] }), status.installCommand ? (_jsxs("div", { className: "rounded bg-zinc-900 px-2 py-1 font-mono text-[10px] text-zinc-300", children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), status.installCommand] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "self-start text-[10px] font-medium text-amber-700 underline underline-offset-2 hover:text-amber-900 dark:text-amber-300 dark:hover:text-amber-100", children: "Re-check" })] }));
|
|
74
74
|
}
|
|
75
75
|
// Installed but not authenticated
|
|
76
76
|
return (_jsxs("div", { className: "flex w-full flex-col gap-2 rounded-md bg-amber-500/10 px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-3 w-3 text-amber-600 dark:text-amber-400" }), _jsxs("span", { className: "text-[10px] font-medium text-amber-700 dark:text-amber-300", children: [status.label, " needs authentication"] })] }), status.authCommand ? (_jsxs("div", { className: "rounded bg-zinc-900 px-2 py-1 font-mono text-[10px] text-zinc-300", children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), status.authCommand] })) : null, _jsxs("div", { className: "flex items-center gap-2", children: [status.binaryName ? (_jsxs("button", { type: "button", "data-testid": "auth-banner-open-terminal", onClick: async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA0FD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useMemo, useState } from 'react';
|
|
4
|
-
import { useRouter } from 'next/navigation';
|
|
4
|
+
import { useRouter, usePathname } from 'next/navigation';
|
|
5
5
|
import { Plus, FolderPlus } from 'lucide-react';
|
|
6
6
|
import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
|
|
7
7
|
import { AppSidebar } from '../../layouts/app-sidebar/index.js';
|
|
@@ -14,9 +14,14 @@ import { DrawerCloseGuardProvider, useDrawerCloseGuard } from '../../../hooks/dr
|
|
|
14
14
|
import { SidebarFeaturesProvider, useSidebarFeaturesContext, } from '../../../hooks/sidebar-features-context.js';
|
|
15
15
|
import { useNotifications } from '../../../hooks/use-notifications.js';
|
|
16
16
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
17
|
-
/**
|
|
17
|
+
/** Control center route prefixes where the FAB should be visible. */
|
|
18
|
+
const CONTROL_CENTER_PREFIXES = ['/', '/create', '/feature', '/repository'];
|
|
19
|
+
function isControlCenterRoute(pathname) {
|
|
20
|
+
return CONTROL_CENTER_PREFIXES.some((prefix) => pathname === prefix || (prefix !== '/' && pathname.startsWith(`${prefix}/`)));
|
|
21
|
+
}
|
|
18
22
|
function AppShellInner({ children }) {
|
|
19
23
|
const router = useRouter();
|
|
24
|
+
const pathname = usePathname();
|
|
20
25
|
const { guardedNavigate } = useDrawerCloseGuard();
|
|
21
26
|
const featureFlags = useFeatureFlags();
|
|
22
27
|
// Subscribe to agent lifecycle events and dispatch toast/browser notifications
|
|
@@ -58,7 +63,7 @@ function AppShellInner({ children }) {
|
|
|
58
63
|
loading: addingRepo,
|
|
59
64
|
},
|
|
60
65
|
], [handleNewFeature, handleAddRepository, addingRepo]);
|
|
61
|
-
return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
|
|
66
|
+
return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), isControlCenterRoute(pathname) && _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
|
|
62
67
|
}
|
|
63
68
|
export function AppShell({ children }) {
|
|
64
69
|
return (_jsx(AgentEventsProvider, { children: _jsx(DrawerCloseGuardProvider, { children: _jsx(SidebarFeaturesProvider, { children: _jsx(AppShellInner, { children: children }) }) }) }));
|