crewly 1.20.141 → 1.20.143
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/config/runtime_scripts/runtime-config.json +7 -0
- package/config/skills/orchestrator/update-team-member/SKILL.md +2 -2
- package/dist/backend/backend/src/constants.d.ts +153 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +175 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +4 -3
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.controller.js +13 -0
- package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts +2 -2
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +41 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +169 -16
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts +267 -0
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js +521 -0
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +10 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +12 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +3 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +57 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +176 -2
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts +15 -3
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js +2 -1
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-api-key.service.d.ts +26 -0
- package/dist/backend/backend/src/services/harness/harness-api-key.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-api-key.service.js +65 -5
- package/dist/backend/backend/src/services/harness/harness-api-key.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +37 -6
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js +57 -9
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-install.service.d.ts +60 -7
- package/dist/backend/backend/src/services/harness/harness-install.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-install.service.js +154 -37
- package/dist/backend/backend/src/services/harness/harness-install.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-registry.d.ts +46 -5
- package/dist/backend/backend/src/services/harness/harness-registry.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-registry.js +53 -8
- package/dist/backend/backend/src/services/harness/harness-registry.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js +15 -0
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.d.ts +15 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.js +34 -6
- package/dist/backend/backend/src/services/harness/harness-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.d.ts +10 -3
- package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.js +4 -3
- package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/backend/backend/src/services/harness/login-expiry-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/login-expiry-rules.js +8 -0
- package/dist/backend/backend/src/services/harness/login-expiry-rules.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +3 -2
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts +10 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.js +12 -1
- package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +1 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +7 -1
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/solution-bundle.types.d.ts +1 -1
- package/dist/backend/backend/src/types/solution-bundle.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/utils/antigravity-settings.utils.d.ts +115 -0
- package/dist/backend/backend/src/utils/antigravity-settings.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/antigravity-settings.utils.js +181 -0
- package/dist/backend/backend/src/utils/antigravity-settings.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts +3 -2
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.js +13 -3
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts +1 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js +29 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +153 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +175 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +41 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +169 -16
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts +267 -0
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js +521 -0
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +10 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +12 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +3 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +57 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +176 -2
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts +15 -3
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js +2 -1
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-api-key.service.d.ts +26 -0
- package/dist/cli/backend/src/services/harness/harness-api-key.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-api-key.service.js +65 -5
- package/dist/cli/backend/src/services/harness/harness-api-key.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +37 -6
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js +57 -9
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-install.service.d.ts +60 -7
- package/dist/cli/backend/src/services/harness/harness-install.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-install.service.js +154 -37
- package/dist/cli/backend/src/services/harness/harness-install.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-registry.d.ts +46 -5
- package/dist/cli/backend/src/services/harness/harness-registry.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-registry.js +53 -8
- package/dist/cli/backend/src/services/harness/harness-registry.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js +15 -0
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-status.service.d.ts +15 -1
- package/dist/cli/backend/src/services/harness/harness-status.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-status.service.js +34 -6
- package/dist/cli/backend/src/services/harness/harness-status.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.d.ts +10 -3
- package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.js +4 -3
- package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/cli/backend/src/services/harness/login-expiry-rules.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/login-expiry-rules.js +8 -0
- package/dist/cli/backend/src/services/harness/login-expiry-rules.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +3 -2
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.js +1 -0
- package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +1 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +7 -1
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/solution-bundle.types.d.ts +1 -1
- package/dist/cli/backend/src/types/solution-bundle.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js +1 -1
- package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
- package/dist/cli/backend/src/utils/antigravity-settings.utils.d.ts +115 -0
- package/dist/cli/backend/src/utils/antigravity-settings.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/antigravity-settings.utils.js +181 -0
- package/dist/cli/backend/src/utils/antigravity-settings.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts +3 -2
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.js +13 -3
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.js.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts +1 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js +29 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/cli/cli/src/commands/doctor.d.ts +2 -2
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/doctor.js +6 -3
- package/dist/cli/cli/src/commands/doctor.js.map +1 -1
- package/dist/cli/cli/src/commands/harness-setup.d.ts +21 -1
- package/dist/cli/cli/src/commands/harness-setup.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/harness-setup.js +53 -16
- package/dist/cli/cli/src/commands/harness-setup.js.map +1 -1
- package/dist/cli/cli/src/commands/harness.d.ts +2 -2
- package/dist/cli/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/harness.js +6 -5
- package/dist/cli/cli/src/commands/harness.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +7 -5
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +6 -4
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/index.js +3 -3
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.d.ts +42 -5
- package/dist/cli/cli/src/utils/runtime-auth.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.js +78 -6
- package/dist/cli/cli/src/utils/runtime-auth.js.map +1 -1
- package/frontend/dist/assets/{index-b4d5575e.js → index-e05af897.js} +271 -271
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
|
-
import { harnessEnvForAgents } from '../harness/harness-credentials.store.js';
|
|
2
|
+
import { getHarnessCredentialsStore, harnessEnvForAgents } from '../harness/harness-credentials.store.js';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import * as os from 'os';
|
|
5
5
|
import { readFile, readdir, stat, mkdir, writeFile, access } from 'fs/promises';
|
|
@@ -33,7 +33,8 @@ import { isPromptLine, containsSpinnerOrWorkingIndicator, containsProcessingIndi
|
|
|
33
33
|
import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
|
|
34
34
|
import { synthesizeSlackConversationId } from '../chat-v2/legacy-dto.utils.js';
|
|
35
35
|
import { isRuntimeStartupBlockedError } from './runtime-startup-blocked.error.js';
|
|
36
|
-
import { buildHandoverSummary, claudeTranscriptPath, conversationExists, lastTurnContextTokens, orcFreshContextTokens, planRuntimeSessionFlags, waitForCodexSessionId, } from './runtime-session-recovery.js';
|
|
36
|
+
import { buildHandoverSummary, claudeTranscriptPath, conversationExists, lastTurnContextTokens, orcFreshContextTokens, planRuntimeSessionFlags, waitForAntigravityConversationId, waitForCodexSessionId, } from './runtime-session-recovery.js';
|
|
37
|
+
import { isTextInAntigravityInputBox } from './antigravity-runtime.service.js';
|
|
37
38
|
import { getLocalApiBaseUrl } from '../../utils/local-api-url.utils.js';
|
|
38
39
|
import { RegistrationFlowRegistry } from './registration-flow-registry.js';
|
|
39
40
|
import { buildResumedKickoff } from './resumed-kickoff.js';
|
|
@@ -892,6 +893,10 @@ export class AgentRegistrationService {
|
|
|
892
893
|
return buildResumedKickoff({ projectRoot: this.projectRoot, sessionName, role, promptFilePath });
|
|
893
894
|
}
|
|
894
895
|
recordRuntimeSessionAfterLaunch(sessionName, runtimeType, cwd, launchedAtMs, plan) {
|
|
896
|
+
if (runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
897
|
+
this.recordAntigravityConversationAfterLaunch(sessionName, cwd, launchedAtMs, plan);
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
895
900
|
if (runtimeType !== RUNTIME_TYPES.CODEX_CLI || plan.resumeSessionId || !cwd)
|
|
896
901
|
return;
|
|
897
902
|
let persistence;
|
|
@@ -923,6 +928,61 @@ export class AgentRegistrationService {
|
|
|
923
928
|
});
|
|
924
929
|
});
|
|
925
930
|
}
|
|
931
|
+
/**
|
|
932
|
+
* For a freshly launched Antigravity agent, learn its conversation id and
|
|
933
|
+
* persist it so a restart can resume with `agy --conversation=<id>`.
|
|
934
|
+
* agy creates the conversation when the first prompt (the registration
|
|
935
|
+
* kickoff) arrives; the conversation whose logs mention this agent's init
|
|
936
|
+
* prompt file wins, else agy's latest conversation for the workspace.
|
|
937
|
+
* Runs in the background; never throws.
|
|
938
|
+
*
|
|
939
|
+
* @param sessionName - Agent session
|
|
940
|
+
* @param cwd - The agent's working directory (agy's workspace)
|
|
941
|
+
* @param launchedAtMs - When the launch command was sent
|
|
942
|
+
* @param plan - The launch plan (skips when resuming a known id)
|
|
943
|
+
*/
|
|
944
|
+
recordAntigravityConversationAfterLaunch(sessionName, cwd, launchedAtMs, plan) {
|
|
945
|
+
if (plan.resumeSessionId || !cwd)
|
|
946
|
+
return;
|
|
947
|
+
let persistence;
|
|
948
|
+
const claimed = new Set();
|
|
949
|
+
try {
|
|
950
|
+
persistence = getSessionStatePersistence();
|
|
951
|
+
for (const name of persistence.getRegisteredSessions()) {
|
|
952
|
+
const id = persistence.getSessionId(name);
|
|
953
|
+
if (id && name !== sessionName)
|
|
954
|
+
claimed.add(id);
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
catch (err) {
|
|
958
|
+
// No (usable) persistence: nothing to record into; the launch goes on.
|
|
959
|
+
this.logger.debug('Antigravity conversation id not recorded: session persistence unavailable', {
|
|
960
|
+
sessionName,
|
|
961
|
+
error: err instanceof Error ? err.message : String(err),
|
|
962
|
+
});
|
|
963
|
+
return;
|
|
964
|
+
}
|
|
965
|
+
void waitForAntigravityConversationId({
|
|
966
|
+
cwd,
|
|
967
|
+
notBeforeMs: launchedAtMs,
|
|
968
|
+
claimed,
|
|
969
|
+
marker: path.basename(this.getInitPromptFilePath(sessionName)),
|
|
970
|
+
})
|
|
971
|
+
.then((conversationId) => {
|
|
972
|
+
if (!conversationId) {
|
|
973
|
+
this.logger.warn('Antigravity conversation id not found after launch (resume after restart will not work)', { sessionName, cwd });
|
|
974
|
+
return;
|
|
975
|
+
}
|
|
976
|
+
persistence.updateSessionId(sessionName, conversationId);
|
|
977
|
+
this.logger.info('Antigravity conversation id recorded', { sessionName, sessionId: conversationId });
|
|
978
|
+
})
|
|
979
|
+
.catch((err) => {
|
|
980
|
+
this.logger.debug('Antigravity conversation id discovery failed (non-fatal)', {
|
|
981
|
+
sessionName,
|
|
982
|
+
error: err instanceof Error ? err.message : String(err),
|
|
983
|
+
});
|
|
984
|
+
});
|
|
985
|
+
}
|
|
926
986
|
/**
|
|
927
987
|
* Get the check interval based on environment.
|
|
928
988
|
* Uses shorter intervals in test environment for faster tests.
|
|
@@ -1381,6 +1441,7 @@ export class AgentRegistrationService {
|
|
|
1381
1441
|
* - Gemini CLI → GEMINI.md (project root)
|
|
1382
1442
|
* - Codex → AGENTS.md (project root)
|
|
1383
1443
|
* - OpenCode → AGENTS.md (project root, same convention as Codex — #306)
|
|
1444
|
+
* - Antigravity → AGENTS.md (project root; agy reads GEMINI.md and AGENTS.md)
|
|
1384
1445
|
*
|
|
1385
1446
|
* Uses 'wx' flag to avoid overwriting existing files.
|
|
1386
1447
|
*
|
|
@@ -1406,6 +1467,11 @@ export class AgentRegistrationService {
|
|
|
1406
1467
|
template: 'agent-agents-md.md',
|
|
1407
1468
|
outputPath: path.join(projectPath, 'AGENTS.md'),
|
|
1408
1469
|
},
|
|
1470
|
+
// agy reads both GEMINI.md and AGENTS.md (antigravity.google/docs/cli/gcli-migration)
|
|
1471
|
+
[RUNTIME_TYPES.ANTIGRAVITY_CLI]: {
|
|
1472
|
+
template: 'agent-agents-md.md',
|
|
1473
|
+
outputPath: path.join(projectPath, 'AGENTS.md'),
|
|
1474
|
+
},
|
|
1409
1475
|
};
|
|
1410
1476
|
const config = configMap[runtimeType];
|
|
1411
1477
|
if (!config)
|
|
@@ -1474,9 +1540,11 @@ export class AgentRegistrationService {
|
|
|
1474
1540
|
// every log line still said "sent successfully" (server-install finding 3).
|
|
1475
1541
|
if (cancelled())
|
|
1476
1542
|
return;
|
|
1477
|
-
await this.waitForRuntimeInputReady(sessionName, runtimeType, signal);
|
|
1543
|
+
const inputReady = await this.waitForRuntimeInputReady(sessionName, runtimeType, signal);
|
|
1478
1544
|
if (cancelled())
|
|
1479
1545
|
return;
|
|
1546
|
+
if (!inputReady && (await this.isOnSignInScreen(sessionName)))
|
|
1547
|
+
return;
|
|
1480
1548
|
const sent = await this.sendPromptRobustly(sessionName, prompt, runtimeType, signal);
|
|
1481
1549
|
if (sent) {
|
|
1482
1550
|
this.logger.info('Registration prompt sent successfully', { sessionName, role });
|
|
@@ -1504,6 +1572,30 @@ export class AgentRegistrationService {
|
|
|
1504
1572
|
this.registrationFlows.end(flow);
|
|
1505
1573
|
}
|
|
1506
1574
|
}
|
|
1575
|
+
/**
|
|
1576
|
+
* Whether the runtime is sitting on its sign-in screen. Typing the kickoff
|
|
1577
|
+
* there after the input-ready timeout put the instruction text into
|
|
1578
|
+
* Codex's "Provide your own API key" box: it became the "API key", every
|
|
1579
|
+
* call 401'd, and the 401 set off a re-login that wiped the owner's fresh
|
|
1580
|
+
* ChatGPT sign-in (2026-09-26, Nova). Nothing is typed; the login monitor
|
|
1581
|
+
* sees the screen and asks the owner to sign in.
|
|
1582
|
+
*
|
|
1583
|
+
* @param sessionName - Session
|
|
1584
|
+
* @returns True when the screen is a sign-in / login prompt
|
|
1585
|
+
*/
|
|
1586
|
+
async isOnSignInScreen(sessionName) {
|
|
1587
|
+
let screen = '';
|
|
1588
|
+
try {
|
|
1589
|
+
screen = (await this.getSessionHelper()).capturePane(sessionName);
|
|
1590
|
+
}
|
|
1591
|
+
catch {
|
|
1592
|
+
return false;
|
|
1593
|
+
}
|
|
1594
|
+
if (!isSignInScreen(screen))
|
|
1595
|
+
return false;
|
|
1596
|
+
this.logger.warn('Runtime is on its sign-in screen — not typing the registration instruction into it', { sessionName });
|
|
1597
|
+
return true;
|
|
1598
|
+
}
|
|
1507
1599
|
/**
|
|
1508
1600
|
* Poll the PTY screen until the runtime is idle at its input prompt
|
|
1509
1601
|
* (`RuntimeAgentService.isReadyForInput`) or the timeout elapses.
|
|
@@ -1625,9 +1717,11 @@ export class AgentRegistrationService {
|
|
|
1625
1717
|
this.logger.warn('No registration within timeout — re-delivering registration instruction', {
|
|
1626
1718
|
sessionName, role, runtimeType, timeoutMs: timeout,
|
|
1627
1719
|
});
|
|
1628
|
-
await this.waitForRuntimeInputReady(sessionName, runtimeType, abortSignal);
|
|
1720
|
+
const readyAgain = await this.waitForRuntimeInputReady(sessionName, runtimeType, abortSignal);
|
|
1629
1721
|
if (this.isFlowCancelled(sessionName, abortSignal))
|
|
1630
1722
|
return;
|
|
1723
|
+
if (!readyAgain && (await this.isOnSignInScreen(sessionName)))
|
|
1724
|
+
return;
|
|
1631
1725
|
const resent = await this.sendPromptRobustly(sessionName, prompt, runtimeType, abortSignal);
|
|
1632
1726
|
this.logger.info('registration re-delivered', { sessionName, role, runtimeType, resent });
|
|
1633
1727
|
}
|
|
@@ -1677,6 +1771,7 @@ export class AgentRegistrationService {
|
|
|
1677
1771
|
await this.createOrchestratorSession({
|
|
1678
1772
|
sessionName,
|
|
1679
1773
|
projectPath: orchestratorCwd,
|
|
1774
|
+
runtimeType,
|
|
1680
1775
|
});
|
|
1681
1776
|
// D3: let the shell print its prompt before the init sequence's Ctrl-C.
|
|
1682
1777
|
await this.waitForShellReady(sessionName);
|
|
@@ -1735,7 +1830,7 @@ export class AgentRegistrationService {
|
|
|
1735
1830
|
// and channel replies).
|
|
1736
1831
|
const recreationCwd = projectPath || process.cwd();
|
|
1737
1832
|
await (await this.getSessionHelper()).createSession(sessionName, recreationCwd, {
|
|
1738
|
-
env: this.buildAgentIdentityEnv(sessionName, role, recreationCwd),
|
|
1833
|
+
env: this.buildAgentIdentityEnv(sessionName, role, recreationCwd, runtimeType),
|
|
1739
1834
|
});
|
|
1740
1835
|
// D3: let the shell print its prompt before the init sequence's Ctrl-C.
|
|
1741
1836
|
await this.waitForShellReady(sessionName);
|
|
@@ -2677,7 +2772,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2677
2772
|
// Create new session for orchestrator — with the identity env (D1), the
|
|
2678
2773
|
// same object the primary path spawns with. windowName not used in PTY backend.
|
|
2679
2774
|
await (await this.getSessionHelper()).createSession(config.sessionName, config.projectPath, {
|
|
2680
|
-
env: this.buildAgentIdentityEnv(config.sessionName, ORCHESTRATOR_ROLE, config.projectPath),
|
|
2775
|
+
env: this.buildAgentIdentityEnv(config.sessionName, ORCHESTRATOR_ROLE, config.projectPath, config.runtimeType),
|
|
2681
2776
|
});
|
|
2682
2777
|
this.logger.info('Orchestrator session created successfully', {
|
|
2683
2778
|
sessionName: config.sessionName,
|
|
@@ -2696,16 +2791,20 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2696
2791
|
* It also carries the harness env (harnessEnvForAgents): PATH with the
|
|
2697
2792
|
* user npm prefix (`~/.crewly/npm-global/bin`, where a harness lands when
|
|
2698
2793
|
* `npm install -g` hit EACCES) and the Claude credential Crewly holds from
|
|
2699
|
-
* onboarding (`CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY`).
|
|
2794
|
+
* onboarding (`CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY`). For an
|
|
2795
|
+
* Antigravity session it adds the saved Gemini key as `GEMINI_API_KEY`
|
|
2796
|
+
* (agy reads the key only from its environment) — in the spawn env, so it
|
|
2797
|
+
* is never typed into the terminal.
|
|
2700
2798
|
*
|
|
2701
2799
|
* @param sessionName - PTY session name (also the agent's identity)
|
|
2702
2800
|
* @param role - Agent role (orchestrator, developer, …)
|
|
2703
2801
|
* @param cwd - Working directory the PTY is spawned in (exposed as CREWLY_PROJECT_PATH)
|
|
2802
|
+
* @param runtimeType - Runtime the session will run, when known
|
|
2704
2803
|
* @returns Env map to pass as `createSession(..., { env })`
|
|
2705
2804
|
*/
|
|
2706
|
-
buildAgentIdentityEnv(sessionName, role, cwd) {
|
|
2805
|
+
buildAgentIdentityEnv(sessionName, role, cwd, runtimeType) {
|
|
2707
2806
|
return {
|
|
2708
|
-
...harnessEnvForAgents(),
|
|
2807
|
+
...harnessEnvForAgents(process.env, runtimeType),
|
|
2709
2808
|
[ENV_CONSTANTS.CREWLY_SESSION_NAME]: sessionName,
|
|
2710
2809
|
[ENV_CONSTANTS.CREWLY_ROLE]: role,
|
|
2711
2810
|
// The port this instance actually runs on, not the default (#777).
|
|
@@ -3196,7 +3295,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3196
3295
|
// reply-channel fails with a misleading 404 (Think Tank, 2026-09-18).
|
|
3197
3296
|
// Same env object as the Step-2 recreation path (buildAgentIdentityEnv).
|
|
3198
3297
|
const createdSession = await sessionHelper.createSession(sessionName, cwdToUse, {
|
|
3199
|
-
env: this.buildAgentIdentityEnv(sessionName, role, cwdToUse),
|
|
3298
|
+
env: this.buildAgentIdentityEnv(sessionName, role, cwdToUse, runtimeType),
|
|
3200
3299
|
});
|
|
3201
3300
|
this.logger.info('PTY session created successfully', {
|
|
3202
3301
|
sessionName,
|
|
@@ -3252,8 +3351,12 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3252
3351
|
// on the child's spawn environment instead.
|
|
3253
3352
|
const settingsService = getSettingsService();
|
|
3254
3353
|
const runtimeContext = { runtime: runtimeType };
|
|
3255
|
-
// Gemini key — needed by gemini-cli and crewly-agent
|
|
3256
|
-
|
|
3354
|
+
// Gemini key — needed by gemini-cli, antigravity-cli and crewly-agent.
|
|
3355
|
+
// An Antigravity session whose key was saved in Settings → Harness
|
|
3356
|
+
// already got it at spawn (buildAgentIdentityEnv); a settings key
|
|
3357
|
+
// must not override it, and the saved key is never typed here.
|
|
3358
|
+
const antigravityKeyAtSpawn = runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI && getHarnessCredentialsStore().getAntigravityGeminiApiKey() !== null;
|
|
3359
|
+
const geminiKey = antigravityKeyAtSpawn ? undefined : await settingsService.getApiKey('gemini', runtimeContext);
|
|
3257
3360
|
if (geminiKey) {
|
|
3258
3361
|
await sessionHelper.setEnvironmentVariable(sessionName, 'GOOGLE_GENERATIVE_AI_API_KEY', geminiKey);
|
|
3259
3362
|
await sessionHelper.setEnvironmentVariable(sessionName, ENV_CONSTANTS.GEMINI_API_KEY, geminiKey);
|
|
@@ -3891,6 +3994,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3891
3994
|
const isClaudeCode = runtimeType === RUNTIME_TYPES.CLAUDE_CODE;
|
|
3892
3995
|
const isCodexCli = runtimeType === RUNTIME_TYPES.CODEX_CLI;
|
|
3893
3996
|
const isGeminiCli = runtimeType === RUNTIME_TYPES.GEMINI_CLI;
|
|
3997
|
+
const isAntigravity = runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI;
|
|
3894
3998
|
// Register TUI sessions for TUI prompt-line scanning (Part 1 of scanner).
|
|
3895
3999
|
// The scanner itself is started lazily by trackSentMessage() which
|
|
3896
4000
|
// runs after every message send, covering all runtimes.
|
|
@@ -4015,6 +4119,16 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4015
4119
|
await sessionHelper.sendKey(sessionName, 'Tab');
|
|
4016
4120
|
await delay(300);
|
|
4017
4121
|
}
|
|
4122
|
+
else if (isAntigravity) {
|
|
4123
|
+
// Antigravity CLI: Ctrl+U clears stale input (verified on agy
|
|
4124
|
+
// 1.2.11). No Tab/Enter nudges: Tab completes slash commands and
|
|
4125
|
+
// the binary labels its spinner "Generating... (Enter/Esc to
|
|
4126
|
+
// cancel)", so a stray Enter or Esc can cancel a running turn.
|
|
4127
|
+
if (attempt > 1) {
|
|
4128
|
+
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
4129
|
+
await delay(300);
|
|
4130
|
+
}
|
|
4131
|
+
}
|
|
4018
4132
|
else if (isCodexCli) {
|
|
4019
4133
|
// #246: Codex CLI TUI recovery — simpler than Gemini.
|
|
4020
4134
|
// Codex uses Ink-based TUI with › prompt. Avoid Gemini-specific
|
|
@@ -4514,7 +4628,25 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4514
4628
|
// literally sitting on the `> ` prompt line). If not stuck, trust the
|
|
4515
4629
|
// write. Skip the output-change heuristics that cause false negatives.
|
|
4516
4630
|
const isGemini = runtimeType === RUNTIME_TYPES.GEMINI_CLI;
|
|
4517
|
-
if (
|
|
4631
|
+
if (isAntigravity) {
|
|
4632
|
+
// --- Antigravity CLI: prompt-box check only ---
|
|
4633
|
+
// agy echoes every submitted message as `> text` above its
|
|
4634
|
+
// prompt box, so the generic "text on a `>` line" check would
|
|
4635
|
+
// call a delivered message stuck. Only the box itself counts.
|
|
4636
|
+
const screen = sessionHelper.capturePane(sessionName);
|
|
4637
|
+
if (!isTextInAntigravityInputBox(screen, message)) {
|
|
4638
|
+
this.logger.debug('Antigravity: message left the prompt box — delivery trusted', { sessionName, attempt });
|
|
4639
|
+
return true;
|
|
4640
|
+
}
|
|
4641
|
+
this.logger.warn('Antigravity: message still in the prompt box — pressing Enter once', { sessionName, attempt });
|
|
4642
|
+
await sessionHelper.sendEnter(sessionName);
|
|
4643
|
+
await delay(SESSION_COMMAND_DELAYS.MESSAGE_PROCESSING_DELAY);
|
|
4644
|
+
if (!isTextInAntigravityInputBox(sessionHelper.capturePane(sessionName), message)) {
|
|
4645
|
+
return true;
|
|
4646
|
+
}
|
|
4647
|
+
this.logger.warn('Antigravity: message still in the prompt box after Enter', { sessionName, attempt });
|
|
4648
|
+
}
|
|
4649
|
+
else if (isGemini) {
|
|
4518
4650
|
// Single stuck-at-prompt check — the only reliable failure signal
|
|
4519
4651
|
const stuckAtPrompt = this.isTextStuckAtTuiPrompt(sessionName, message);
|
|
4520
4652
|
if (stuckAtPrompt) {
|
|
@@ -4615,6 +4747,12 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4615
4747
|
if (isClaudeCode) {
|
|
4616
4748
|
await sessionHelper.clearCurrentCommandLine(sessionName);
|
|
4617
4749
|
}
|
|
4750
|
+
else if (isAntigravity) {
|
|
4751
|
+
// Antigravity: clear the prompt box (Ctrl+U) so the retry types
|
|
4752
|
+
// the message into an empty box. No Ctrl+C (arms exit), no Tab.
|
|
4753
|
+
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
4754
|
+
await delay(300);
|
|
4755
|
+
}
|
|
4618
4756
|
else {
|
|
4619
4757
|
// Gemini CLI retry cleanup: NEVER send Ctrl+C — it triggers /quit
|
|
4620
4758
|
// and kills the CLI entirely, regardless of whether text is in the
|
|
@@ -4890,7 +5028,10 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4890
5028
|
try {
|
|
4891
5029
|
// Skip Gemini CLI sessions — their TUI prompt behaves differently
|
|
4892
5030
|
// and false-positive stuck detection causes Tab+Enter spam.
|
|
4893
|
-
|
|
5031
|
+
// Skip Antigravity too: its idle placeholder and the `> text` echo
|
|
5032
|
+
// of every submitted message sit on `>` lines, and Enter during a
|
|
5033
|
+
// turn can cancel it; its deliveries are verified on the prompt box.
|
|
5034
|
+
if (runtimeType === RUNTIME_TYPES.GEMINI_CLI || runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
4894
5035
|
continue;
|
|
4895
5036
|
}
|
|
4896
5037
|
// #213: Skip orchestrator — it frequently waits for long-running
|
|
@@ -4960,7 +5101,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4960
5101
|
// Skip Gemini CLI sessions — Tab+Enter recovery causes more harm
|
|
4961
5102
|
// than good because the Gemini TUI handles input differently.
|
|
4962
5103
|
const trackedRuntime = this.tuiSessionRegistry.get(sessionName);
|
|
4963
|
-
if (trackedRuntime === RUNTIME_TYPES.GEMINI_CLI) {
|
|
5104
|
+
if (trackedRuntime === RUNTIME_TYPES.GEMINI_CLI || trackedRuntime === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
4964
5105
|
continue;
|
|
4965
5106
|
}
|
|
4966
5107
|
try {
|
|
@@ -5375,10 +5516,11 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
5375
5516
|
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
5376
5517
|
await delay(300);
|
|
5377
5518
|
}
|
|
5378
|
-
else if (runtimeType === RUNTIME_TYPES.CODEX_CLI) {
|
|
5519
|
+
else if (runtimeType === RUNTIME_TYPES.CODEX_CLI || runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
5379
5520
|
// #246: Codex CLI — Ctrl+U to clear any stale input text.
|
|
5380
5521
|
// Unlike Gemini, Codex doesn't need Enter flush; its Ink TUI
|
|
5381
5522
|
// handles Ctrl+U for line clear similar to Claude Code.
|
|
5523
|
+
// Antigravity clears its prompt box on Ctrl+U the same way.
|
|
5382
5524
|
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
5383
5525
|
await delay(300);
|
|
5384
5526
|
}
|
|
@@ -5513,4 +5655,15 @@ export function codexHasOwnLogin(env = process.env) {
|
|
|
5513
5655
|
const home = env.CODEX_HOME && env.CODEX_HOME.length > 0 ? env.CODEX_HOME : path.join(os.homedir(), '.codex');
|
|
5514
5656
|
return existsSync(path.join(home, 'auth.json'));
|
|
5515
5657
|
}
|
|
5658
|
+
/** Sign-in prompts of the CLI runtimes (compared with spaces removed: TUIs drop them). */
|
|
5659
|
+
const SIGN_IN_SCREEN = /signinwithchatgpt|provideyourownapikey|signinwithdevicecode|pastecodehereifprompted|usetheurlbelowtosignin|loginwithgoogle/i;
|
|
5660
|
+
/**
|
|
5661
|
+
* Whether a captured screen is a runtime's sign-in / login prompt.
|
|
5662
|
+
*
|
|
5663
|
+
* @param screen - Captured terminal text
|
|
5664
|
+
* @returns True for a sign-in screen
|
|
5665
|
+
*/
|
|
5666
|
+
export function isSignInScreen(screen) {
|
|
5667
|
+
return SIGN_IN_SCREEN.test((screen ?? '').replace(/\s+/g, ''));
|
|
5668
|
+
}
|
|
5516
5669
|
//# sourceMappingURL=agent-registration.service.js.map
|