@gajae-code/coding-agent 0.18.11 → 0.18.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +293 -0
- package/dist/types/async/job-manager.d.ts +7 -3
- package/dist/types/async/result-formatting.d.ts +2 -0
- package/dist/types/autoresearch/git.d.ts +1 -1
- package/dist/types/capability/fs.d.ts +2 -2
- package/dist/types/cli/accounts-cli.d.ts +2 -2
- package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
- package/dist/types/cli/install-activation.d.ts +10 -4
- package/dist/types/cli/public-command-errors.d.ts +1 -0
- package/dist/types/cli/update-cli.d.ts +14 -1
- package/dist/types/cli-ordinary.d.ts +2 -2
- package/dist/types/commands/accounts.d.ts +2 -1
- package/dist/types/commands/migrate.d.ts +1 -1
- package/dist/types/commands/sdk.d.ts +5 -0
- package/dist/types/commit/changelog/index.d.ts +1 -0
- package/dist/types/config/autorouting-tier-map.d.ts +30 -0
- package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
- package/dist/types/config/config-hot-reload.d.ts +39 -0
- package/dist/types/config/file-lock.d.ts +8 -1
- package/dist/types/config/model-discovery-manager.d.ts +2 -0
- package/dist/types/config/model-profile-activation.d.ts +62 -6
- package/dist/types/config/model-registry.d.ts +56 -5
- package/dist/types/config/model-resolver.d.ts +2 -0
- package/dist/types/config/models-config-schema.d.ts +10 -0
- package/dist/types/config/settings-schema.d.ts +46 -3
- package/dist/types/config/settings.d.ts +33 -1
- package/dist/types/dap/config.d.ts +8 -4
- package/dist/types/debug/system-info.d.ts +6 -1
- package/dist/types/discovery/mcp-compat.d.ts +3 -1
- package/dist/types/edit/modes/patch.d.ts +5 -0
- package/dist/types/edit/modes/replace.d.ts +3 -0
- package/dist/types/exec/bash-executor.d.ts +12 -0
- package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
- package/dist/types/migrate/adapters/codex.d.ts +2 -1
- package/dist/types/migrate/adapters/index.d.ts +10 -1
- package/dist/types/migrate/executor.d.ts +3 -1
- package/dist/types/migrate/types.d.ts +15 -3
- package/dist/types/modes/components/settings-selector.d.ts +6 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
- package/dist/types/modes/theme/theme.d.ts +1 -0
- package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
- package/dist/types/runtime-mcp/manager.d.ts +7 -0
- package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
- package/dist/types/sdk/broker/broker-exit.d.ts +2 -2
- package/dist/types/sdk/broker/broker.d.ts +7 -1
- package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
- package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
- package/dist/types/sdk/broker/ensure.d.ts +136 -7
- package/dist/types/sdk/broker/hop.d.ts +36 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
- package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
- package/dist/types/sdk/broker/session-index.d.ts +4 -1
- package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
- package/dist/types/sdk/bus/index.d.ts +23 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
- package/dist/types/sdk/cli/session-cli.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.d.ts +32 -0
- package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
- package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
- package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
- package/dist/types/sdk/session-list.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +58 -2
- package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
- package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
- package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
- package/dist/types/session/messages.d.ts +5 -1
- package/dist/types/session/session-manager.d.ts +13 -3
- package/dist/types/session/startup-auth-config.d.ts +24 -2
- package/dist/types/session/streaming-output.d.ts +11 -0
- package/dist/types/session/terminal-abort.d.ts +3 -1
- package/dist/types/session-import/service.d.ts +1 -1
- package/dist/types/skill-state/workflow-mutation-guard.d.ts +7 -3
- package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
- package/dist/types/task/executor.d.ts +19 -2
- package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
- package/dist/types/tools/atomic-file-write.d.ts +9 -7
- package/dist/types/tools/bash-allowed-prefixes.d.ts +11 -0
- package/dist/types/tools/descriptors.d.ts +2 -0
- package/dist/types/tools/fetch.d.ts +1 -1
- package/dist/types/tools/index.d.ts +2 -0
- package/dist/types/tools/python.d.ts +1 -1
- package/dist/types/tools/report-issue.d.ts +41 -0
- package/dist/types/tools/subagent.d.ts +23 -0
- package/dist/types/web/scrapers/types.d.ts +8 -1
- package/dist/types/web/search/providers/insane.d.ts +7 -1
- package/dist/types/web/search/providers/searxng.d.ts +5 -0
- package/package.json +8 -8
- package/scripts/build-binary.ts +2 -1
- package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
- package/scripts/generate-docs-index.ts +8 -1
- package/scripts/generate-sdk-operation-inventory.ts +22 -4
- package/src/async/job-manager.ts +356 -56
- package/src/async/result-formatting.ts +40 -0
- package/src/autoresearch/git.ts +9 -2
- package/src/autoresearch/prompts/prompt-setup.md +1 -1
- package/src/capability/fs.ts +27 -19
- package/src/capability/index.ts +2 -2
- package/src/cli/accounts-cli.ts +176 -8
- package/src/cli/auth-broker-cli.ts +21 -11
- package/src/cli/doctor/install-repairs.ts +35 -5
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/install-activation.ts +47 -4
- package/src/cli/migrate-cli.ts +7 -5
- package/src/cli/public-command-errors.ts +4 -0
- package/src/cli/root-flags.ts +2 -2
- package/src/cli/stats-cli.ts +9 -5
- package/src/cli/update-cli.ts +224 -7
- package/src/cli-ordinary.ts +7 -2
- package/src/commands/accounts.ts +10 -5
- package/src/commands/migrate.ts +3 -3
- package/src/commands/sdk.ts +199 -42
- package/src/commands/ultragoal.ts +16 -8
- package/src/commit/changelog/index.ts +39 -1
- package/src/commit/message.ts +10 -3
- package/src/config/autorouting-tier-map.ts +30 -0
- package/src/config/config-hot-reload-trust.ts +148 -0
- package/src/config/config-hot-reload.ts +734 -0
- package/src/config/file-lock.ts +216 -56
- package/src/config/model-bindings-applier.ts +85 -47
- package/src/config/model-discovery-manager.ts +10 -0
- package/src/config/model-profile-activation.ts +716 -113
- package/src/config/model-registry.ts +1334 -158
- package/src/config/model-resolver.ts +3 -1
- package/src/config/models-config-schema.ts +6 -0
- package/src/config/settings-schema.ts +60 -3
- package/src/config/settings.ts +458 -24
- package/src/coordinator-mcp/policy.ts +26 -1
- package/src/crash/sanitize.ts +4 -0
- package/src/customization/import.ts +3 -1
- package/src/dap/config.ts +31 -11
- package/src/dap/defaults.json +1 -1
- package/src/debug/crash-diagnostics.ts +2 -1
- package/src/debug/report-bundle.ts +19 -0
- package/src/debug/system-info.ts +8 -3
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
- package/src/discovery/agents-md.ts +1 -1
- package/src/discovery/helpers.ts +1 -2
- package/src/discovery/mcp-compat.ts +120 -17
- package/src/edit/apply-patch/index.ts +12 -1
- package/src/edit/index.ts +13 -17
- package/src/edit/modes/patch.ts +187 -8
- package/src/edit/modes/replace.ts +136 -0
- package/src/eval/js/context-manager.ts +29 -3
- package/src/eval/js/worker-entry.ts +51 -18
- package/src/eval/py/executor.ts +14 -4
- package/src/eval/py/runner.py +144 -5
- package/src/exec/bash-executor.ts +81 -4
- package/src/exec/bash-shell-guardian.ts +4 -1
- package/src/exec/bash-shell-supervisor.ts +8 -4
- package/src/exec/isolated-shell.ts +5 -1
- package/src/export/html/index.ts +46 -6
- package/src/extensibility/custom-tools/wrapper.ts +3 -1
- package/src/extensibility/extensions/loader.ts +8 -1
- package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
- package/src/gjc-runtime/gc-runtime.ts +33 -6
- package/src/gjc-runtime/launch-tmux.ts +7 -2
- package/src/gjc-runtime/launch-worktree.test.ts +148 -0
- package/src/gjc-runtime/launch-worktree.ts +101 -14
- package/src/gjc-runtime/managed-owner-admission.ts +46 -2
- package/src/gjc-runtime/session-resolution.ts +38 -6
- package/src/gjc-runtime/session-state-lock.ts +59 -14
- package/src/gjc-runtime/state-runtime.ts +23 -19
- package/src/hooks/native-skill-hook.ts +14 -11
- package/src/internal-urls/docs-index.generated.ts +14 -13
- package/src/internal-urls/local-protocol.ts +142 -8
- package/src/lsp/index.ts +29 -0
- package/src/lsp/workspace-path.ts +23 -0
- package/src/migrate/action-planner.ts +57 -0
- package/src/migrate/adapters/claude-code.ts +23 -4
- package/src/migrate/adapters/codex.ts +22 -4
- package/src/migrate/adapters/index.ts +22 -4
- package/src/migrate/adapters/opencode.ts +6 -1
- package/src/migrate/executor.ts +84 -7
- package/src/migrate/report.ts +19 -2
- package/src/migrate/types.ts +14 -4
- package/src/modes/DESIGN.md +51 -0
- package/src/modes/acp/permission-mode.ts +18 -1
- package/src/modes/components/assistant-message.ts +55 -1
- package/src/modes/components/settings-selector.ts +103 -37
- package/src/modes/controllers/command-controller.ts +38 -2
- package/src/modes/controllers/plan-mode-controller.ts +17 -7
- package/src/modes/controllers/selector-controller.ts +62 -6
- package/src/modes/interactive-mode.ts +68 -0
- package/src/modes/theme/theme.ts +15 -0
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/read.md +1 -1
- package/src/prompts/tools/report-issue.md +13 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/runtime-credential-selector.ts +2 -2
- package/src/runtime-mcp/content-limits.ts +7 -0
- package/src/runtime-mcp/manager-pool.test.ts +5 -4
- package/src/runtime-mcp/manager.ts +32 -0
- package/src/runtime-mcp/oauth-flow.ts +32 -6
- package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
- package/src/runtime-mcp/render.ts +16 -1
- package/src/runtime-mcp/tool-bridge.ts +126 -17
- package/src/sdk/broker/broker-exit.ts +8 -5
- package/src/sdk/broker/broker.ts +342 -82
- package/src/sdk/broker/daemon-entry.ts +338 -116
- package/src/sdk/broker/doctor-restart.ts +2 -1
- package/src/sdk/broker/ensure.ts +1143 -265
- package/src/sdk/broker/hop.ts +274 -0
- package/src/sdk/broker/lifecycle-ledger.ts +35 -11
- package/src/sdk/broker/lock-host-identity.ts +29 -0
- package/src/sdk/broker/session-index.ts +62 -12
- package/src/sdk/bus/chat-command-policy.ts +16 -3
- package/src/sdk/bus/index.ts +52 -21
- package/src/sdk/bus/reconciliation-store.ts +201 -8
- package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
- package/src/sdk/cli/session-cli.ts +21 -6
- package/src/sdk/host/session-runtime.test.ts +118 -23
- package/src/sdk/host/session-runtime.ts +352 -47
- package/src/sdk/lifecycle/service.ts +1 -0
- package/src/sdk/prompt-deadline-flush.ts +78 -5
- package/src/sdk/prompt-deadline-manager.ts +68 -14
- package/src/sdk/protocol/adapter-validation.ts +53 -11
- package/src/sdk/protocol/operation-inventory.generated.json +101 -2
- package/src/sdk/reconciliation-extensions.ts +1 -0
- package/src/sdk/session-list.ts +1 -0
- package/src/sdk/session.ts +114 -61
- package/src/session/agent-session.ts +1043 -81
- package/src/session/internal/managed-session-scope.ts +126 -39
- package/src/session/internal/managed-session-storage.ts +14 -11
- package/src/session/internal/native-publish-outcome.ts +5 -1
- package/src/session/messages.ts +47 -6
- package/src/session/session-manager.ts +236 -14
- package/src/session/startup-auth-config.ts +116 -8
- package/src/session/streaming-output.ts +262 -4
- package/src/session/terminal-abort.ts +14 -2
- package/src/session-import/service.ts +1 -0
- package/src/skill-state/workflow-mutation-guard.ts +491 -32
- package/src/slash-commands/builtin-registry.ts +15 -3
- package/src/slash-commands/helpers/credential-switch.ts +10 -5
- package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
- package/src/task/executor.ts +103 -12
- package/src/task/index.ts +389 -175
- package/src/tools/ast-edit-write-path.ts +64 -0
- package/src/tools/ast-edit.ts +18 -1
- package/src/tools/atomic-file-write.ts +46 -15
- package/src/tools/auto-generated-guard.ts +3 -0
- package/src/tools/bash-allowed-prefixes.ts +153 -5
- package/src/tools/bash-interactive.ts +14 -2
- package/src/tools/bash.ts +14 -0
- package/src/tools/debug.ts +7 -6
- package/src/tools/descriptors.test.ts +44 -0
- package/src/tools/descriptors.ts +34 -2
- package/src/tools/fetch.ts +3 -2
- package/src/tools/index.ts +2 -0
- package/src/tools/output-meta.ts +23 -2
- package/src/tools/python.ts +1 -1
- package/src/tools/read.ts +17 -35
- package/src/tools/report-issue.ts +184 -0
- package/src/tools/subagent-render.ts +114 -12
- package/src/tools/subagent.ts +108 -1
- package/src/tools/todo-write.ts +41 -3
- package/src/tools/tool-catalog.generated.ts +31 -3
- package/src/tools/write.ts +35 -3
- package/src/utils/commit-message-generator.ts +9 -2
- package/src/utils/file-mentions.ts +29 -1
- package/src/utils/title-generator.ts +7 -2
- package/src/web/scrapers/index.ts +3 -1
- package/src/web/scrapers/types.ts +8 -0
- package/src/web/scrapers/youtube.ts +3 -2
- package/src/web/search/providers/insane.ts +91 -28
- package/src/web/search/providers/searxng.ts +62 -10
|
@@ -1896,10 +1896,10 @@ const EXECUTION_APPROVAL_TRANSCRIPT_MAX_BYTES = 128 * 1024 * 1024;
|
|
|
1896
1896
|
const DEEP_INTERVIEW_EXECUTION_APPROVAL_RECORD_MAX_BYTES = 16 * 1024;
|
|
1897
1897
|
const DEEP_INTERVIEW_EXECUTION_APPROVAL_ID_MAX_LENGTH = 256;
|
|
1898
1898
|
|
|
1899
|
+
// The boundary binds approval to transcript content (prefix length/sha256, leaf, Ask call), not to
|
|
1900
|
+
// the file's inode: SessionManager persists full rewrites by atomic rename, which replaces the inode.
|
|
1899
1901
|
export interface ExecutionApprovalTranscriptBoundary {
|
|
1900
1902
|
byte_length: number;
|
|
1901
|
-
device: string;
|
|
1902
|
-
inode: string;
|
|
1903
1903
|
leaf_id: string | null;
|
|
1904
1904
|
approval_tool_call_id: string;
|
|
1905
1905
|
}
|
|
@@ -1909,10 +1909,6 @@ function isExecutionApprovalTranscriptBoundary(value: unknown): value is Executi
|
|
|
1909
1909
|
isPlainObject(value) &&
|
|
1910
1910
|
Number.isSafeInteger(value.byte_length) &&
|
|
1911
1911
|
(value.byte_length as number) > 0 &&
|
|
1912
|
-
typeof value.device === "string" &&
|
|
1913
|
-
/^\d+$/.test(value.device) &&
|
|
1914
|
-
typeof value.inode === "string" &&
|
|
1915
|
-
/^\d+$/.test(value.inode) &&
|
|
1916
1912
|
(value.leaf_id === null || isExecutionApprovalId(value.leaf_id)) &&
|
|
1917
1913
|
isExecutionApprovalId(value.approval_tool_call_id)
|
|
1918
1914
|
);
|
|
@@ -2037,8 +2033,6 @@ export async function captureExecutionApprovalTranscriptBoundary(
|
|
|
2037
2033
|
throw new StateCommandError(2, "execution approval transcript boundary lacks the current Ask call");
|
|
2038
2034
|
return {
|
|
2039
2035
|
byte_length: Buffer.byteLength(text),
|
|
2040
|
-
device: after.dev.toString(),
|
|
2041
|
-
inode: after.ino.toString(),
|
|
2042
2036
|
leaf_id: prefix.leaf,
|
|
2043
2037
|
approval_tool_call_id: approvalToolCallId,
|
|
2044
2038
|
};
|
|
@@ -2062,13 +2056,8 @@ export async function assertExecutionApprovalTranscriptBoundary(
|
|
|
2062
2056
|
const after = await fs.lstat(transcriptPath, { bigint: true });
|
|
2063
2057
|
if ((await fs.realpath(transcriptPath)) !== path.resolve(transcriptPath))
|
|
2064
2058
|
throw new StateCommandError(2, "execution approval transcript path is not canonical");
|
|
2065
|
-
if (
|
|
2066
|
-
|
|
2067
|
-
after.dev.toString() !== boundary.device ||
|
|
2068
|
-
after.ino.toString() !== boundary.inode ||
|
|
2069
|
-
text === undefined
|
|
2070
|
-
)
|
|
2071
|
-
throw new StateCommandError(2, "execution approval transcript identity changed");
|
|
2059
|
+
if (!sameBoundedFileIdentity(before, after) || text === undefined)
|
|
2060
|
+
throw new StateCommandError(2, "execution approval transcript changed while it was read");
|
|
2072
2061
|
const bytes = Buffer.from(text);
|
|
2073
2062
|
const prefix = bytes.subarray(0, boundary.byte_length);
|
|
2074
2063
|
if (prefix.length !== boundary.byte_length || createHash("sha256").update(prefix).digest("hex") !== transcriptSha256)
|
|
@@ -3222,6 +3211,21 @@ async function assertSanctionedExecutionApprovalAudit(
|
|
|
3222
3211
|
)
|
|
3223
3212
|
throw new StateCommandError(2, "deep-interview execution approval lacks sanctioned transition provenance");
|
|
3224
3213
|
|
|
3214
|
+
// The approval index is written only after the append-only ledger entry.
|
|
3215
|
+
// A pending journal means that append did not finish, so the index must
|
|
3216
|
+
// not authorize execution handoff.
|
|
3217
|
+
let approvalJournal: WorkflowTransactionJournal | undefined;
|
|
3218
|
+
try {
|
|
3219
|
+
approvalJournal = await readWorkflowTransactionJournal(cwd, sessionId, mutationId);
|
|
3220
|
+
} catch (error) {
|
|
3221
|
+
throw new StateCommandError(
|
|
3222
|
+
2,
|
|
3223
|
+
`failed to read execution approval journal: ${error instanceof Error ? error.message : String(error)}`,
|
|
3224
|
+
);
|
|
3225
|
+
}
|
|
3226
|
+
if (approvalJournal?.status === "pending")
|
|
3227
|
+
throw new StateCommandError(2, "deep-interview execution approval journal is incomplete");
|
|
3228
|
+
|
|
3225
3229
|
const indexedApprovalPath = path.join(sessionStateDir(cwd, sessionId), "deep-interview-approval-audit.json");
|
|
3226
3230
|
let indexedRaw = "";
|
|
3227
3231
|
try {
|
|
@@ -5067,8 +5071,6 @@ async function appendExecutionApprovalAudit(
|
|
|
5067
5071
|
} = {},
|
|
5068
5072
|
): Promise<void> {
|
|
5069
5073
|
const entry = buildExecutionApprovalAuditEntry(options);
|
|
5070
|
-
await writeExecutionApprovalIndex(options, entry);
|
|
5071
|
-
await hooks.afterIndex?.();
|
|
5072
5074
|
const filePath = auditPath(options.cwd, options.sessionId);
|
|
5073
5075
|
await withWorkflowStateLock(
|
|
5074
5076
|
filePath,
|
|
@@ -5089,6 +5091,8 @@ async function appendExecutionApprovalAudit(
|
|
|
5089
5091
|
},
|
|
5090
5092
|
{ cwd: options.cwd },
|
|
5091
5093
|
);
|
|
5094
|
+
await writeExecutionApprovalIndex(options, entry);
|
|
5095
|
+
await hooks.afterIndex?.();
|
|
5092
5096
|
await hooks.afterAudit?.();
|
|
5093
5097
|
}
|
|
5094
5098
|
|
|
@@ -5296,8 +5300,6 @@ async function handleApproveExecutionRecordLocked(
|
|
|
5296
5300
|
indexedMatches = isPlainObject(parsed) && JSON.stringify(parsed) === JSON.stringify(expectedApprovalEntry);
|
|
5297
5301
|
} catch {}
|
|
5298
5302
|
}
|
|
5299
|
-
if (!indexedMatches) await writeExecutionApprovalIndex(approvalOptions, expectedApprovalEntry);
|
|
5300
|
-
recoverySteps.add("approval-index");
|
|
5301
5303
|
let approvalAuditOffset = pendingJournal.approval_audit_offset;
|
|
5302
5304
|
if (!recoverySteps.has("approval-audit")) {
|
|
5303
5305
|
approvalAuditOffset = await appendExecutionApprovalAuditIdempotent(
|
|
@@ -5312,6 +5314,8 @@ async function handleApproveExecutionRecordLocked(
|
|
|
5312
5314
|
);
|
|
5313
5315
|
recoverySteps.add("approval-audit");
|
|
5314
5316
|
}
|
|
5317
|
+
if (!indexedMatches) await writeExecutionApprovalIndex(approvalOptions, expectedApprovalEntry);
|
|
5318
|
+
recoverySteps.add("approval-index");
|
|
5315
5319
|
await updateWorkflowTransactionJournal(cwd, selectors.gjcSessionId, existingReceipt.mutation_id, {
|
|
5316
5320
|
steps: [...recoverySteps],
|
|
5317
5321
|
approval_audit_offset: approvalAuditOffset,
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { appendFile, mkdir, stat } from "node:fs/promises";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { getAgentDir, getConfigDirName } from "@gajae-code/utils";
|
|
4
|
+
import { projectEnvSnapshot } from "@gajae-code/utils/env-file";
|
|
4
5
|
import { YAML } from "bun";
|
|
5
6
|
import type { SkillDiscoverySettings } from "../config/skill-settings-defaults";
|
|
6
7
|
import { DEFAULT_DISABLED_EXTENSIONS, DEFAULT_SKILL_DISCOVERY_SETTINGS } from "../config/skill-settings-defaults";
|
|
7
8
|
import { sessionLogsDir } from "../gjc-runtime/session-layout";
|
|
9
|
+
import { trustedCoordinatorEnv } from "../gjc-runtime/sidecar-bootstrap-env";
|
|
8
10
|
import {
|
|
9
11
|
detectMcpDelegateFlowActivation,
|
|
10
12
|
type McpDelegateHostContextV1,
|
|
@@ -281,14 +283,14 @@ function readTurnId(payload: HookPayload): string | undefined {
|
|
|
281
283
|
return safeString(payload.turn_id ?? payload.turnId).trim() || undefined;
|
|
282
284
|
}
|
|
283
285
|
|
|
284
|
-
function readSessionFile(payload: HookPayload): string | undefined {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
);
|
|
286
|
+
function readSessionFile(payload: HookPayload, cwd: string): string | undefined {
|
|
287
|
+
const explicit = safeString(
|
|
288
|
+
payload.session_file ?? payload.sessionFile ?? payload.transcript_path ?? payload.transcriptPath,
|
|
289
|
+
).trim();
|
|
290
|
+
if (explicit) return explicit;
|
|
291
|
+
// Bun has already copied the project dotenv into the environment. A value
|
|
292
|
+
// that matches that snapshot must not select another transcript.
|
|
293
|
+
return trustedCoordinatorEnv("GJC_SESSION_FILE", process.env, projectEnvSnapshot(cwd));
|
|
292
294
|
}
|
|
293
295
|
|
|
294
296
|
export async function dispatchGjcNativeSkillHook(
|
|
@@ -297,6 +299,7 @@ export async function dispatchGjcNativeSkillHook(
|
|
|
297
299
|
): Promise<GjcNativeHookDispatchResult> {
|
|
298
300
|
const hookEventName = readHookEventName(payload);
|
|
299
301
|
const cwd = (options.cwd ?? safeString(payload.cwd).trim()) || process.cwd();
|
|
302
|
+
const sessionFile = readSessionFile(payload, cwd);
|
|
300
303
|
if (hookEventName === "UserPromptSubmit") {
|
|
301
304
|
const recoveryDiagnostics = await collectUserPromptStateRecoveryDiagnostics({
|
|
302
305
|
cwd,
|
|
@@ -304,7 +307,7 @@ export async function dispatchGjcNativeSkillHook(
|
|
|
304
307
|
threadId: readThreadId(payload),
|
|
305
308
|
stateDir: options.stateDir,
|
|
306
309
|
prompt: readPromptText(payload),
|
|
307
|
-
sessionFile
|
|
310
|
+
sessionFile,
|
|
308
311
|
});
|
|
309
312
|
const recoveryContext = buildStateRecoveryDiagnosticsContext(recoveryDiagnostics);
|
|
310
313
|
const prompt = readPromptText(payload);
|
|
@@ -346,7 +349,7 @@ export async function dispatchGjcNativeSkillHook(
|
|
|
346
349
|
threadId: readThreadId(payload),
|
|
347
350
|
stateDir: options.stateDir,
|
|
348
351
|
prompt,
|
|
349
|
-
sessionFile
|
|
352
|
+
sessionFile,
|
|
350
353
|
});
|
|
351
354
|
if (activeUltragoalContext?.startsWith("BLOCK_ULTRAGOAL_COMPLETION:")) {
|
|
352
355
|
return {
|
|
@@ -390,7 +393,7 @@ export async function dispatchGjcNativeSkillHook(
|
|
|
390
393
|
sessionId: readSessionId(payload),
|
|
391
394
|
threadId: readThreadId(payload),
|
|
392
395
|
stateDir: options.stateDir,
|
|
393
|
-
sessionFile
|
|
396
|
+
sessionFile,
|
|
394
397
|
}),
|
|
395
398
|
};
|
|
396
399
|
}
|