crewly 1.20.142 → 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 +151 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +173 -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 +22 -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 +128 -14
- 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-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/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 +151 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +173 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +22 -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 +128 -14
- 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-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/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)
|
|
@@ -1705,6 +1771,7 @@ export class AgentRegistrationService {
|
|
|
1705
1771
|
await this.createOrchestratorSession({
|
|
1706
1772
|
sessionName,
|
|
1707
1773
|
projectPath: orchestratorCwd,
|
|
1774
|
+
runtimeType,
|
|
1708
1775
|
});
|
|
1709
1776
|
// D3: let the shell print its prompt before the init sequence's Ctrl-C.
|
|
1710
1777
|
await this.waitForShellReady(sessionName);
|
|
@@ -1763,7 +1830,7 @@ export class AgentRegistrationService {
|
|
|
1763
1830
|
// and channel replies).
|
|
1764
1831
|
const recreationCwd = projectPath || process.cwd();
|
|
1765
1832
|
await (await this.getSessionHelper()).createSession(sessionName, recreationCwd, {
|
|
1766
|
-
env: this.buildAgentIdentityEnv(sessionName, role, recreationCwd),
|
|
1833
|
+
env: this.buildAgentIdentityEnv(sessionName, role, recreationCwd, runtimeType),
|
|
1767
1834
|
});
|
|
1768
1835
|
// D3: let the shell print its prompt before the init sequence's Ctrl-C.
|
|
1769
1836
|
await this.waitForShellReady(sessionName);
|
|
@@ -2705,7 +2772,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2705
2772
|
// Create new session for orchestrator — with the identity env (D1), the
|
|
2706
2773
|
// same object the primary path spawns with. windowName not used in PTY backend.
|
|
2707
2774
|
await (await this.getSessionHelper()).createSession(config.sessionName, config.projectPath, {
|
|
2708
|
-
env: this.buildAgentIdentityEnv(config.sessionName, ORCHESTRATOR_ROLE, config.projectPath),
|
|
2775
|
+
env: this.buildAgentIdentityEnv(config.sessionName, ORCHESTRATOR_ROLE, config.projectPath, config.runtimeType),
|
|
2709
2776
|
});
|
|
2710
2777
|
this.logger.info('Orchestrator session created successfully', {
|
|
2711
2778
|
sessionName: config.sessionName,
|
|
@@ -2724,16 +2791,20 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
2724
2791
|
* It also carries the harness env (harnessEnvForAgents): PATH with the
|
|
2725
2792
|
* user npm prefix (`~/.crewly/npm-global/bin`, where a harness lands when
|
|
2726
2793
|
* `npm install -g` hit EACCES) and the Claude credential Crewly holds from
|
|
2727
|
-
* 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.
|
|
2728
2798
|
*
|
|
2729
2799
|
* @param sessionName - PTY session name (also the agent's identity)
|
|
2730
2800
|
* @param role - Agent role (orchestrator, developer, …)
|
|
2731
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
|
|
2732
2803
|
* @returns Env map to pass as `createSession(..., { env })`
|
|
2733
2804
|
*/
|
|
2734
|
-
buildAgentIdentityEnv(sessionName, role, cwd) {
|
|
2805
|
+
buildAgentIdentityEnv(sessionName, role, cwd, runtimeType) {
|
|
2735
2806
|
return {
|
|
2736
|
-
...harnessEnvForAgents(),
|
|
2807
|
+
...harnessEnvForAgents(process.env, runtimeType),
|
|
2737
2808
|
[ENV_CONSTANTS.CREWLY_SESSION_NAME]: sessionName,
|
|
2738
2809
|
[ENV_CONSTANTS.CREWLY_ROLE]: role,
|
|
2739
2810
|
// The port this instance actually runs on, not the default (#777).
|
|
@@ -3224,7 +3295,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3224
3295
|
// reply-channel fails with a misleading 404 (Think Tank, 2026-09-18).
|
|
3225
3296
|
// Same env object as the Step-2 recreation path (buildAgentIdentityEnv).
|
|
3226
3297
|
const createdSession = await sessionHelper.createSession(sessionName, cwdToUse, {
|
|
3227
|
-
env: this.buildAgentIdentityEnv(sessionName, role, cwdToUse),
|
|
3298
|
+
env: this.buildAgentIdentityEnv(sessionName, role, cwdToUse, runtimeType),
|
|
3228
3299
|
});
|
|
3229
3300
|
this.logger.info('PTY session created successfully', {
|
|
3230
3301
|
sessionName,
|
|
@@ -3280,8 +3351,12 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3280
3351
|
// on the child's spawn environment instead.
|
|
3281
3352
|
const settingsService = getSettingsService();
|
|
3282
3353
|
const runtimeContext = { runtime: runtimeType };
|
|
3283
|
-
// Gemini key — needed by gemini-cli and crewly-agent
|
|
3284
|
-
|
|
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);
|
|
3285
3360
|
if (geminiKey) {
|
|
3286
3361
|
await sessionHelper.setEnvironmentVariable(sessionName, 'GOOGLE_GENERATIVE_AI_API_KEY', geminiKey);
|
|
3287
3362
|
await sessionHelper.setEnvironmentVariable(sessionName, ENV_CONSTANTS.GEMINI_API_KEY, geminiKey);
|
|
@@ -3919,6 +3994,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
3919
3994
|
const isClaudeCode = runtimeType === RUNTIME_TYPES.CLAUDE_CODE;
|
|
3920
3995
|
const isCodexCli = runtimeType === RUNTIME_TYPES.CODEX_CLI;
|
|
3921
3996
|
const isGeminiCli = runtimeType === RUNTIME_TYPES.GEMINI_CLI;
|
|
3997
|
+
const isAntigravity = runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI;
|
|
3922
3998
|
// Register TUI sessions for TUI prompt-line scanning (Part 1 of scanner).
|
|
3923
3999
|
// The scanner itself is started lazily by trackSentMessage() which
|
|
3924
4000
|
// runs after every message send, covering all runtimes.
|
|
@@ -4043,6 +4119,16 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4043
4119
|
await sessionHelper.sendKey(sessionName, 'Tab');
|
|
4044
4120
|
await delay(300);
|
|
4045
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
|
+
}
|
|
4046
4132
|
else if (isCodexCli) {
|
|
4047
4133
|
// #246: Codex CLI TUI recovery — simpler than Gemini.
|
|
4048
4134
|
// Codex uses Ink-based TUI with › prompt. Avoid Gemini-specific
|
|
@@ -4542,7 +4628,25 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4542
4628
|
// literally sitting on the `> ` prompt line). If not stuck, trust the
|
|
4543
4629
|
// write. Skip the output-change heuristics that cause false negatives.
|
|
4544
4630
|
const isGemini = runtimeType === RUNTIME_TYPES.GEMINI_CLI;
|
|
4545
|
-
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) {
|
|
4546
4650
|
// Single stuck-at-prompt check — the only reliable failure signal
|
|
4547
4651
|
const stuckAtPrompt = this.isTextStuckAtTuiPrompt(sessionName, message);
|
|
4548
4652
|
if (stuckAtPrompt) {
|
|
@@ -4643,6 +4747,12 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4643
4747
|
if (isClaudeCode) {
|
|
4644
4748
|
await sessionHelper.clearCurrentCommandLine(sessionName);
|
|
4645
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
|
+
}
|
|
4646
4756
|
else {
|
|
4647
4757
|
// Gemini CLI retry cleanup: NEVER send Ctrl+C — it triggers /quit
|
|
4648
4758
|
// and kills the CLI entirely, regardless of whether text is in the
|
|
@@ -4918,7 +5028,10 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4918
5028
|
try {
|
|
4919
5029
|
// Skip Gemini CLI sessions — their TUI prompt behaves differently
|
|
4920
5030
|
// and false-positive stuck detection causes Tab+Enter spam.
|
|
4921
|
-
|
|
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) {
|
|
4922
5035
|
continue;
|
|
4923
5036
|
}
|
|
4924
5037
|
// #213: Skip orchestrator — it frequently waits for long-running
|
|
@@ -4988,7 +5101,7 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
4988
5101
|
// Skip Gemini CLI sessions — Tab+Enter recovery causes more harm
|
|
4989
5102
|
// than good because the Gemini TUI handles input differently.
|
|
4990
5103
|
const trackedRuntime = this.tuiSessionRegistry.get(sessionName);
|
|
4991
|
-
if (trackedRuntime === RUNTIME_TYPES.GEMINI_CLI) {
|
|
5104
|
+
if (trackedRuntime === RUNTIME_TYPES.GEMINI_CLI || trackedRuntime === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
4992
5105
|
continue;
|
|
4993
5106
|
}
|
|
4994
5107
|
try {
|
|
@@ -5403,10 +5516,11 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
5403
5516
|
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
5404
5517
|
await delay(300);
|
|
5405
5518
|
}
|
|
5406
|
-
else if (runtimeType === RUNTIME_TYPES.CODEX_CLI) {
|
|
5519
|
+
else if (runtimeType === RUNTIME_TYPES.CODEX_CLI || runtimeType === RUNTIME_TYPES.ANTIGRAVITY_CLI) {
|
|
5407
5520
|
// #246: Codex CLI — Ctrl+U to clear any stale input text.
|
|
5408
5521
|
// Unlike Gemini, Codex doesn't need Enter flush; its Ink TUI
|
|
5409
5522
|
// handles Ctrl+U for line clear similar to Claude Code.
|
|
5523
|
+
// Antigravity clears its prompt box on Ctrl+U the same way.
|
|
5410
5524
|
await sessionHelper.sendKey(sessionName, 'C-u');
|
|
5411
5525
|
await delay(300);
|
|
5412
5526
|
}
|