@kilnai/cli 0.23.2 → 1.0.0
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/README.md +33 -0
- package/dist/application/__tests__/plan-exit-tool.test.d.ts +2 -0
- package/dist/application/__tests__/plan-exit-tool.test.d.ts.map +1 -0
- package/dist/application/__tests__/plan-exit-tool.test.js +12 -0
- package/dist/application/__tests__/plan-exit-tool.test.js.map +1 -0
- package/dist/application/agent-loader.d.ts +12 -0
- package/dist/application/agent-loader.d.ts.map +1 -0
- package/dist/application/agent-loader.js +114 -0
- package/dist/application/agent-loader.js.map +1 -0
- package/dist/application/agent-loader.test.d.ts +2 -0
- package/dist/application/agent-loader.test.d.ts.map +1 -0
- package/dist/application/agent-loader.test.js +151 -0
- package/dist/application/agent-loader.test.js.map +1 -0
- package/dist/application/context-artifact-keys.d.ts +5 -0
- package/dist/application/context-artifact-keys.d.ts.map +1 -0
- package/dist/application/context-artifact-keys.js +14 -0
- package/dist/application/context-artifact-keys.js.map +1 -0
- package/dist/application/context-governance.d.ts +6 -0
- package/dist/application/context-governance.d.ts.map +1 -0
- package/dist/application/context-governance.js +20 -0
- package/dist/application/context-governance.js.map +1 -0
- package/dist/application/context-governor.d.ts +26 -0
- package/dist/application/context-governor.d.ts.map +1 -0
- package/dist/application/context-governor.js +164 -0
- package/dist/application/context-governor.js.map +1 -0
- package/dist/application/context-types.d.ts +20 -0
- package/dist/application/context-types.d.ts.map +1 -0
- package/dist/application/context-types.js +21 -0
- package/dist/application/context-types.js.map +1 -0
- package/dist/application/plan-exit-tool.d.ts +19 -0
- package/dist/application/plan-exit-tool.d.ts.map +1 -0
- package/dist/application/plan-exit-tool.js +13 -0
- package/dist/application/plan-exit-tool.js.map +1 -0
- package/dist/application/repo-summary-cache.d.ts +5 -0
- package/dist/application/repo-summary-cache.d.ts.map +1 -0
- package/dist/application/repo-summary-cache.js +82 -0
- package/dist/application/repo-summary-cache.js.map +1 -0
- package/dist/application/resume-strategy-feedback.d.ts +5 -0
- package/dist/application/resume-strategy-feedback.d.ts.map +1 -0
- package/dist/application/resume-strategy-feedback.js +81 -0
- package/dist/application/resume-strategy-feedback.js.map +1 -0
- package/dist/application/resume-strategy-policy.d.ts +26 -0
- package/dist/application/resume-strategy-policy.d.ts.map +1 -0
- package/dist/application/resume-strategy-policy.js +35 -0
- package/dist/application/resume-strategy-policy.js.map +1 -0
- package/dist/application/run-session.d.ts +39 -0
- package/dist/application/run-session.d.ts.map +1 -0
- package/dist/application/run-session.js +349 -0
- package/dist/application/run-session.js.map +1 -0
- package/dist/application/session-hooks.d.ts +20 -0
- package/dist/application/session-hooks.d.ts.map +1 -0
- package/dist/application/session-hooks.js +55 -0
- package/dist/application/session-hooks.js.map +1 -0
- package/dist/application/session-ledger.d.ts +12 -0
- package/dist/application/session-ledger.d.ts.map +1 -0
- package/dist/application/session-ledger.js +29 -0
- package/dist/application/session-ledger.js.map +1 -0
- package/dist/application/session-report.d.ts +19 -0
- package/dist/application/session-report.d.ts.map +1 -0
- package/dist/application/session-report.js +207 -0
- package/dist/application/session-report.js.map +1 -0
- package/dist/application/session-resume.d.ts +3 -0
- package/dist/application/session-resume.d.ts.map +1 -0
- package/dist/application/session-resume.js +16 -0
- package/dist/application/session-resume.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +138 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +141 -27
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/cron.d.ts +3 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +201 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/dev.js +2 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/domain.js +17 -17
- package/dist/commands/domain.js.map +1 -1
- package/dist/commands/init.d.ts +2 -11
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-config.d.ts +7 -1
- package/dist/commands/mcp-config.d.ts.map +1 -1
- package/dist/commands/mcp-config.js +26 -10
- package/dist/commands/mcp-config.js.map +1 -1
- package/dist/commands/memory.d.ts +1 -1
- package/dist/commands/memory.d.ts.map +1 -1
- package/dist/commands/memory.js +10 -10
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/run.d.ts +15 -3
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +464 -85
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/serve.d.ts +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +3 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/skill-capture.d.ts +13 -0
- package/dist/commands/skill-capture.d.ts.map +1 -0
- package/dist/commands/skill-capture.js +212 -0
- package/dist/commands/skill-capture.js.map +1 -0
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +7 -3
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +15 -16
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +11 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +114 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/tools.d.ts +6 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +28 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/tui.d.ts +29 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +444 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/config/config-merger.d.ts +5 -0
- package/dist/config/config-merger.d.ts.map +1 -0
- package/dist/config/config-merger.js +25 -0
- package/dist/config/config-merger.js.map +1 -0
- package/dist/config/config-merger.test.d.ts +2 -0
- package/dist/config/config-merger.test.d.ts.map +1 -0
- package/dist/config/config-merger.test.js +165 -0
- package/dist/config/config-merger.test.js.map +1 -0
- package/dist/config/env-config.d.ts +5 -0
- package/dist/config/env-config.d.ts.map +1 -0
- package/dist/config/env-config.js +24 -0
- package/dist/config/env-config.js.map +1 -0
- package/dist/config/env-config.test.d.ts +2 -0
- package/dist/config/env-config.test.d.ts.map +1 -0
- package/dist/config/env-config.test.js +79 -0
- package/dist/config/env-config.test.js.map +1 -0
- package/dist/config/global-config.d.ts +23 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +48 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config/global-config.test.d.ts +2 -0
- package/dist/config/global-config.test.d.ts.map +1 -0
- package/dist/config/global-config.test.js +96 -0
- package/dist/config/global-config.test.js.map +1 -0
- package/dist/config-resolver.d.ts +5 -0
- package/dist/config-resolver.d.ts.map +1 -0
- package/dist/config-resolver.js +19 -0
- package/dist/config-resolver.js.map +1 -0
- package/dist/config.d.ts +8 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +193 -16
- package/dist/index.js.map +1 -1
- package/dist/kiln-yaml-types.d.ts +127 -0
- package/dist/kiln-yaml-types.d.ts.map +1 -0
- package/dist/kiln-yaml-types.js +42 -0
- package/dist/kiln-yaml-types.js.map +1 -0
- package/dist/kiln-yaml.d.ts +10 -0
- package/dist/kiln-yaml.d.ts.map +1 -0
- package/dist/kiln-yaml.js +109 -0
- package/dist/kiln-yaml.js.map +1 -0
- package/dist/mcp/config-generator.d.ts +9 -2
- package/dist/mcp/config-generator.d.ts.map +1 -1
- package/dist/mcp/config-generator.js +132 -2
- package/dist/mcp/config-generator.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-entry.js +0 -5
- package/dist/mcp-entry.js.map +1 -1
- package/dist/sync/agent-sync.d.ts +13 -0
- package/dist/sync/agent-sync.d.ts.map +1 -0
- package/dist/sync/agent-sync.js +130 -0
- package/dist/sync/agent-sync.js.map +1 -0
- package/dist/sync/agent-sync.test.d.ts +2 -0
- package/dist/sync/agent-sync.test.d.ts.map +1 -0
- package/dist/sync/agent-sync.test.js +130 -0
- package/dist/sync/agent-sync.test.js.map +1 -0
- package/dist/sync/agents-md-sync.d.ts +7 -0
- package/dist/sync/agents-md-sync.d.ts.map +1 -0
- package/dist/sync/agents-md-sync.js +44 -0
- package/dist/sync/agents-md-sync.js.map +1 -0
- package/dist/sync/agents-md-sync.test.d.ts +2 -0
- package/dist/sync/agents-md-sync.test.d.ts.map +1 -0
- package/dist/sync/agents-md-sync.test.js +154 -0
- package/dist/sync/agents-md-sync.test.js.map +1 -0
- package/dist/sync/hook-sync.d.ts +8 -0
- package/dist/sync/hook-sync.d.ts.map +1 -0
- package/dist/sync/hook-sync.js +90 -0
- package/dist/sync/hook-sync.js.map +1 -0
- package/dist/sync/security-sync.d.ts +9 -0
- package/dist/sync/security-sync.d.ts.map +1 -0
- package/dist/sync/security-sync.js +161 -0
- package/dist/sync/security-sync.js.map +1 -0
- package/dist/sync/skill-sync.d.ts +10 -0
- package/dist/sync/skill-sync.d.ts.map +1 -0
- package/dist/sync/skill-sync.js +87 -0
- package/dist/sync/skill-sync.js.map +1 -0
- package/dist/sync/skill-sync.test.d.ts +2 -0
- package/dist/sync/skill-sync.test.d.ts.map +1 -0
- package/dist/sync/skill-sync.test.js +163 -0
- package/dist/sync/skill-sync.test.js.map +1 -0
- package/dist/wrapper/approval-memory-store.d.ts +40 -0
- package/dist/wrapper/approval-memory-store.d.ts.map +1 -0
- package/dist/wrapper/approval-memory-store.js +132 -0
- package/dist/wrapper/approval-memory-store.js.map +1 -0
- package/dist/wrapper/claude-code-process.d.ts +32 -34
- package/dist/wrapper/claude-code-process.d.ts.map +1 -1
- package/dist/wrapper/claude-code-process.js +181 -66
- package/dist/wrapper/claude-code-process.js.map +1 -1
- package/dist/wrapper/cleanup-registry.d.ts +7 -0
- package/dist/wrapper/cleanup-registry.d.ts.map +1 -0
- package/dist/wrapper/cleanup-registry.js +11 -0
- package/dist/wrapper/cleanup-registry.js.map +1 -0
- package/dist/wrapper/codex-session.d.ts +49 -0
- package/dist/wrapper/codex-session.d.ts.map +1 -0
- package/dist/wrapper/codex-session.js +470 -0
- package/dist/wrapper/codex-session.js.map +1 -0
- package/dist/wrapper/debug.d.ts +2 -0
- package/dist/wrapper/debug.d.ts.map +1 -0
- package/dist/wrapper/debug.js +7 -0
- package/dist/wrapper/debug.js.map +1 -0
- package/dist/wrapper/executable-provider-session.d.ts +26 -0
- package/dist/wrapper/executable-provider-session.d.ts.map +1 -0
- package/dist/wrapper/executable-provider-session.js +214 -0
- package/dist/wrapper/executable-provider-session.js.map +1 -0
- package/dist/wrapper/hook-executor.d.ts +21 -0
- package/dist/wrapper/hook-executor.d.ts.map +1 -0
- package/dist/wrapper/hook-executor.js +100 -0
- package/dist/wrapper/hook-executor.js.map +1 -0
- package/dist/wrapper/hook-registry.d.ts +10 -0
- package/dist/wrapper/hook-registry.d.ts.map +1 -0
- package/dist/wrapper/hook-registry.js +57 -0
- package/dist/wrapper/hook-registry.js.map +1 -0
- package/dist/wrapper/index.d.ts +83 -2
- package/dist/wrapper/index.d.ts.map +1 -1
- package/dist/wrapper/index.js +11 -0
- package/dist/wrapper/index.js.map +1 -1
- package/dist/wrapper/mcp-selector.d.ts +2 -0
- package/dist/wrapper/mcp-selector.d.ts.map +1 -0
- package/dist/wrapper/mcp-selector.js +8 -0
- package/dist/wrapper/mcp-selector.js.map +1 -0
- package/dist/wrapper/opencode-session.d.ts +69 -0
- package/dist/wrapper/opencode-session.d.ts.map +1 -0
- package/dist/wrapper/opencode-session.js +568 -0
- package/dist/wrapper/opencode-session.js.map +1 -0
- package/dist/wrapper/permission-evaluator.d.ts +57 -0
- package/dist/wrapper/permission-evaluator.d.ts.map +1 -0
- package/dist/wrapper/permission-evaluator.js +310 -0
- package/dist/wrapper/permission-evaluator.js.map +1 -0
- package/dist/wrapper/permission-normalizer.d.ts +13 -0
- package/dist/wrapper/permission-normalizer.d.ts.map +1 -0
- package/dist/wrapper/permission-normalizer.js +88 -0
- package/dist/wrapper/permission-normalizer.js.map +1 -0
- package/dist/wrapper/permission-policy-authorizer.d.ts +12 -0
- package/dist/wrapper/permission-policy-authorizer.d.ts.map +1 -0
- package/dist/wrapper/permission-policy-authorizer.js +64 -0
- package/dist/wrapper/permission-policy-authorizer.js.map +1 -0
- package/dist/wrapper/preamble-builder.d.ts +7 -0
- package/dist/wrapper/preamble-builder.d.ts.map +1 -0
- package/dist/wrapper/preamble-builder.js +103 -0
- package/dist/wrapper/preamble-builder.js.map +1 -0
- package/dist/wrapper/provider-context.d.ts +20 -0
- package/dist/wrapper/provider-context.d.ts.map +1 -0
- package/dist/wrapper/provider-context.js +58 -0
- package/dist/wrapper/provider-context.js.map +1 -0
- package/dist/wrapper/provider-session.d.ts +27 -0
- package/dist/wrapper/provider-session.d.ts.map +1 -0
- package/dist/wrapper/provider-session.js +208 -0
- package/dist/wrapper/provider-session.js.map +1 -0
- package/dist/wrapper/session-manager.d.ts +21 -4
- package/dist/wrapper/session-manager.d.ts.map +1 -1
- package/dist/wrapper/session-manager.js +173 -14
- package/dist/wrapper/session-manager.js.map +1 -1
- package/dist/wrapper/session-registry.d.ts +136 -0
- package/dist/wrapper/session-registry.d.ts.map +1 -0
- package/dist/wrapper/session-registry.js +977 -0
- package/dist/wrapper/session-registry.js.map +1 -0
- package/dist/wrapper/session-store.d.ts +63 -0
- package/dist/wrapper/session-store.d.ts.map +1 -0
- package/dist/wrapper/session-store.js +215 -0
- package/dist/wrapper/session-store.js.map +1 -0
- package/dist/wrapper/session.d.ts +127 -0
- package/dist/wrapper/session.d.ts.map +1 -0
- package/dist/wrapper/session.js +14 -0
- package/dist/wrapper/session.js.map +1 -0
- package/dist/wrapper/worktree-manager.d.ts +30 -0
- package/dist/wrapper/worktree-manager.d.ts.map +1 -0
- package/dist/wrapper/worktree-manager.js +139 -0
- package/dist/wrapper/worktree-manager.js.map +1 -0
- package/package.json +11 -7
|
@@ -1,7 +1,66 @@
|
|
|
1
1
|
import { dirname, join } from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { Orchestrator } from "@kilnai/core";
|
|
3
|
+
import { Orchestrator, GateRunner, VerificationLoop, EventBus } from "@kilnai/core";
|
|
4
4
|
import { MODEL_PRICING } from "@kilnai/core";
|
|
5
|
+
import { defaultBuildSystemPrompt } from "../config.js";
|
|
6
|
+
import { DefaultContextGovernor } from "../application/context-governor.js";
|
|
7
|
+
import { buildCliPlanSummaryArtifactKey, buildCliProjectSummaryArtifactKey, buildCliSessionSummaryArtifactKey, } from "../application/context-artifact-keys.js";
|
|
8
|
+
import { buildModuleArtifactKey, extractTouchedFilePaths } from "../application/repo-summary-cache.js";
|
|
9
|
+
import { collectResumeSignals, decideResumeStrategy, } from "../application/resume-strategy-policy.js";
|
|
10
|
+
function resolveContextGovernancePolicy(appConfig) {
|
|
11
|
+
const config = appConfig.kilnYaml?.contextGovernance;
|
|
12
|
+
return {
|
|
13
|
+
tokenBudget: config?.turnBudget,
|
|
14
|
+
useCache: config?.cachePolicy !== "off",
|
|
15
|
+
preferredSources: config?.preferredSources,
|
|
16
|
+
summaryAggressiveness: config?.summaryAggressiveness,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function buildResumeProjectionState(input) {
|
|
20
|
+
const { cache, projectPath, task, worktreePath, resumeSessionId, resumedMeta, moduleArtifactKeys } = input;
|
|
21
|
+
const sessionArtifactKey = resumeSessionId
|
|
22
|
+
? buildCliSessionSummaryArtifactKey(resumeSessionId)
|
|
23
|
+
: undefined;
|
|
24
|
+
const projectArtifactKey = buildCliProjectSummaryArtifactKey(projectPath);
|
|
25
|
+
const planArtifactKey = buildCliPlanSummaryArtifactKey(projectPath, task, 80);
|
|
26
|
+
const signals = collectResumeSignals({
|
|
27
|
+
cache,
|
|
28
|
+
keys: [sessionArtifactKey, projectArtifactKey, planArtifactKey],
|
|
29
|
+
includeModules: moduleArtifactKeys.length > 0,
|
|
30
|
+
});
|
|
31
|
+
const { cachedResumeSignalCount, hasCachedResumeContext } = signals;
|
|
32
|
+
const sessionLedger = {
|
|
33
|
+
currentPhase: resumedMeta?.sessionLedger?.currentPhase ?? "prepare",
|
|
34
|
+
resumedFrom: resumeSessionId,
|
|
35
|
+
workingDirectory: projectPath,
|
|
36
|
+
worktreePath,
|
|
37
|
+
lastError: hasCachedResumeContext ? undefined : resumedMeta?.sessionLedger?.lastError,
|
|
38
|
+
lastProvider: resumedMeta?.sessionLedger?.lastProvider,
|
|
39
|
+
toolCallCount: resumedMeta?.sessionLedger?.toolCallCount,
|
|
40
|
+
turnDepth: resumedMeta?.sessionLedger?.turnDepth,
|
|
41
|
+
};
|
|
42
|
+
const fallbackArtifacts = hasCachedResumeContext
|
|
43
|
+
? []
|
|
44
|
+
: (resumedMeta?.exactArtifacts ?? []).slice(0, 10);
|
|
45
|
+
const decision = decideResumeStrategy({
|
|
46
|
+
resumeSessionId,
|
|
47
|
+
preferredProvider: input.preferredProvider,
|
|
48
|
+
signals,
|
|
49
|
+
feedback: input.feedback,
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
hasCachedResumeContext,
|
|
53
|
+
cachedResumeSignalCount,
|
|
54
|
+
resumeStrategy: decision.resumeStrategy,
|
|
55
|
+
resumeFeedback: decision.resumeFeedback,
|
|
56
|
+
sessionLedger,
|
|
57
|
+
exactArtifacts: [
|
|
58
|
+
...fallbackArtifacts,
|
|
59
|
+
...(worktreePath ? [`Active isolated worktree path: ${worktreePath}`] : []),
|
|
60
|
+
],
|
|
61
|
+
shouldUseProviderNativeResume: decision.shouldUseProviderNativeResume,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
5
64
|
/**
|
|
6
65
|
* Manages the full session lifecycle: prepare -> cleanup.
|
|
7
66
|
*
|
|
@@ -11,46 +70,100 @@ import { MODEL_PRICING } from "@kilnai/core";
|
|
|
11
70
|
export class SessionManager {
|
|
12
71
|
wrapperConfig;
|
|
13
72
|
appConfig;
|
|
73
|
+
contextArtifactCache;
|
|
74
|
+
worktreeManager;
|
|
14
75
|
orchestrator = null;
|
|
15
76
|
domain = null;
|
|
16
77
|
sessionStartTime = null;
|
|
17
|
-
|
|
78
|
+
activeSessionId = null;
|
|
79
|
+
costTurns = [];
|
|
80
|
+
lastThreeOutputs = [];
|
|
81
|
+
turnIndex = 0;
|
|
82
|
+
get sessionStartTimeMs() {
|
|
83
|
+
return this.sessionStartTime;
|
|
84
|
+
}
|
|
85
|
+
constructor(wrapperConfig, appConfig, contextArtifactCache, worktreeManager) {
|
|
18
86
|
this.wrapperConfig = wrapperConfig;
|
|
19
87
|
this.appConfig = appConfig;
|
|
88
|
+
this.contextArtifactCache = contextArtifactCache;
|
|
89
|
+
this.worktreeManager = worktreeManager;
|
|
20
90
|
}
|
|
21
91
|
/**
|
|
22
92
|
* Pre-session setup: detect domain, build system prompt, resolve MCP entry path.
|
|
23
93
|
* Returns a SessionContext with all fields populated.
|
|
24
94
|
*/
|
|
25
|
-
prepare(task, projectPath, memorySnapshot) {
|
|
95
|
+
async prepare(task, projectPath, memorySnapshot, isolate, resumeSessionId, resumedMeta, preferredProvider, resumeStrategyFeedback) {
|
|
26
96
|
const registry = this.appConfig.createRegistry();
|
|
27
97
|
registry.loadInstalledDomains(projectPath);
|
|
28
98
|
this.domain = registry.detectAndMerge(projectPath);
|
|
29
|
-
const
|
|
99
|
+
const mcpServerEntryPath = join(dirname(fileURLToPath(import.meta.url)), "..", "mcp", "index.js");
|
|
100
|
+
this.orchestrator = new Orchestrator();
|
|
101
|
+
this.sessionStartTime = Date.now();
|
|
102
|
+
let workingDirectory = projectPath;
|
|
103
|
+
let worktreePath;
|
|
104
|
+
if (isolate && this.worktreeManager) {
|
|
105
|
+
const sessionId = crypto.randomUUID();
|
|
106
|
+
const handle = await this.worktreeManager.allocate(sessionId);
|
|
107
|
+
workingDirectory = handle.path;
|
|
108
|
+
worktreePath = handle.path;
|
|
109
|
+
this.activeSessionId = sessionId;
|
|
110
|
+
}
|
|
111
|
+
const touchedFiles = extractTouchedFilePaths(resumedMeta?.exactArtifacts ?? []);
|
|
112
|
+
const moduleArtifactKeys = (await Promise.all(touchedFiles.slice(0, 5).map((filePath) => buildModuleArtifactKey(projectPath, filePath)))).filter((key) => key !== undefined);
|
|
113
|
+
const { resumeStrategy, resumeFeedback, sessionLedger, exactArtifacts, shouldUseProviderNativeResume, } = buildResumeProjectionState({
|
|
114
|
+
cache: this.contextArtifactCache,
|
|
115
|
+
projectPath,
|
|
30
116
|
task,
|
|
31
|
-
|
|
117
|
+
worktreePath,
|
|
118
|
+
resumeSessionId,
|
|
119
|
+
resumedMeta,
|
|
120
|
+
moduleArtifactKeys,
|
|
121
|
+
preferredProvider,
|
|
122
|
+
feedback: resumeStrategyFeedback,
|
|
123
|
+
});
|
|
124
|
+
const governancePolicy = resolveContextGovernancePolicy(this.appConfig);
|
|
125
|
+
const providerResumeSessionId = shouldUseProviderNativeResume ? resumeSessionId : undefined;
|
|
126
|
+
const projectedContext = new DefaultContextGovernor().project({
|
|
32
127
|
memorySnapshot,
|
|
128
|
+
sessionLedger,
|
|
129
|
+
exactArtifacts,
|
|
130
|
+
cache: governancePolicy.useCache ? this.contextArtifactCache : undefined,
|
|
131
|
+
moduleArtifactKeys,
|
|
132
|
+
projectArtifactKey: buildCliProjectSummaryArtifactKey(projectPath),
|
|
133
|
+
planArtifactKey: buildCliPlanSummaryArtifactKey(projectPath, task, 80),
|
|
134
|
+
sessionArtifactKey: resumeSessionId
|
|
135
|
+
? buildCliSessionSummaryArtifactKey(resumeSessionId)
|
|
136
|
+
: undefined,
|
|
137
|
+
tokenBudget: governancePolicy.tokenBudget,
|
|
138
|
+
preferredSources: governancePolicy.preferredSources,
|
|
139
|
+
summaryAggressiveness: governancePolicy.summaryAggressiveness,
|
|
140
|
+
});
|
|
141
|
+
const systemPrompt = (this.appConfig.buildSystemPrompt ?? defaultBuildSystemPrompt)({
|
|
142
|
+
task,
|
|
143
|
+
domain: this.domain,
|
|
144
|
+
projectedContext,
|
|
33
145
|
projectPath,
|
|
34
146
|
});
|
|
35
|
-
// Resolve the MCP server entry script path (for SDK stdio transport).
|
|
36
|
-
// Uses .js extension so the path is valid in both dev (bun runs .js) and
|
|
37
|
-
// published npm packages (only .js exists in dist/).
|
|
38
|
-
const mcpServerEntryPath = join(dirname(fileURLToPath(import.meta.url)), "..", "mcp", "index.js");
|
|
39
|
-
this.orchestrator = new Orchestrator();
|
|
40
|
-
this.sessionStartTime = Date.now();
|
|
41
147
|
return {
|
|
42
148
|
mode: this.wrapperConfig.mode,
|
|
43
149
|
domain: this.domain,
|
|
44
150
|
systemPrompt,
|
|
151
|
+
projectedContext,
|
|
45
152
|
mcpServerEntryPath,
|
|
46
|
-
workingDirectory
|
|
153
|
+
workingDirectory,
|
|
47
154
|
task,
|
|
155
|
+
worktreePath,
|
|
156
|
+
resumeSessionId: providerResumeSessionId,
|
|
157
|
+
resumeStrategy,
|
|
158
|
+
resumeFeedback,
|
|
48
159
|
};
|
|
49
160
|
}
|
|
50
161
|
/**
|
|
51
162
|
* Post-session cleanup: build report.
|
|
163
|
+
* @param totalCostUsd Cost reported directly from the session (ClaudeSession.total_cost_usd).
|
|
164
|
+
* Falls back to Orchestrator costSummary when session cost is unavailable.
|
|
52
165
|
*/
|
|
53
|
-
cleanup(sessionId) {
|
|
166
|
+
cleanup(sessionId, totalCostUsd, verificationResult, evalScore) {
|
|
54
167
|
const duration = this.sessionStartTime
|
|
55
168
|
? Date.now() - this.sessionStartTime
|
|
56
169
|
: 0;
|
|
@@ -67,12 +180,58 @@ export class SessionManager {
|
|
|
67
180
|
domain: this.domain?.displayName ?? "Unknown",
|
|
68
181
|
phaseReached: this.orchestrator?.currentPhase ?? "analyze",
|
|
69
182
|
cost: {
|
|
70
|
-
total: costSummary?.totalCostUsd ?? 0,
|
|
183
|
+
total: totalCostUsd ?? costSummary?.totalCostUsd ?? 0,
|
|
71
184
|
byRoleModel,
|
|
185
|
+
breakdown: this.costTurns,
|
|
72
186
|
},
|
|
73
187
|
duration,
|
|
188
|
+
verificationResult: verificationResult
|
|
189
|
+
? { passed: verificationResult.passed, checks: verificationResult.checks }
|
|
190
|
+
: undefined,
|
|
191
|
+
evalScore,
|
|
74
192
|
};
|
|
75
193
|
}
|
|
194
|
+
async cleanupWorktree(context) {
|
|
195
|
+
if (context.worktreePath && this.worktreeManager && this.activeSessionId) {
|
|
196
|
+
await this.worktreeManager.release(this.activeSessionId);
|
|
197
|
+
this.activeSessionId = null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
trackCostUpdate(inputTokens, outputTokens, cacheReadTokens, costUsd) {
|
|
201
|
+
this.costTurns.push({
|
|
202
|
+
turn: this.turnIndex++,
|
|
203
|
+
inputTokens,
|
|
204
|
+
outputTokens,
|
|
205
|
+
cacheReadTokens,
|
|
206
|
+
costUsd,
|
|
207
|
+
});
|
|
208
|
+
this.lastThreeOutputs.push(outputTokens);
|
|
209
|
+
if (this.lastThreeOutputs.length > 3) {
|
|
210
|
+
this.lastThreeOutputs.shift();
|
|
211
|
+
}
|
|
212
|
+
if (this.lastThreeOutputs.length === 3) {
|
|
213
|
+
if (this.lastThreeOutputs.every((v) => v < 500)) {
|
|
214
|
+
console.error("[kiln] warning: token budget diminishing returns detected");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
resetCostTracking() {
|
|
219
|
+
this.costTurns = [];
|
|
220
|
+
this.lastThreeOutputs = [];
|
|
221
|
+
this.turnIndex = 0;
|
|
222
|
+
}
|
|
223
|
+
async runVerification(gates, cwd) {
|
|
224
|
+
const eventBus = new EventBus();
|
|
225
|
+
const gateRunner = new GateRunner({ cwd, timeoutMs: 60_000 });
|
|
226
|
+
const loop = new VerificationLoop({
|
|
227
|
+
gateRunner,
|
|
228
|
+
eventBus,
|
|
229
|
+
config: { maxIterations: 1, coverageThreshold: 0 },
|
|
230
|
+
gates,
|
|
231
|
+
sessionId: this.activeSessionId ?? "",
|
|
232
|
+
});
|
|
233
|
+
return loop.run();
|
|
234
|
+
}
|
|
76
235
|
}
|
|
77
236
|
/** Compute USD cost for a single role usage entry */
|
|
78
237
|
function computeRoleCostUsd(usage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/wrapper/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/wrapper/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { SessionCapabilities, IKilnSession, KilnCommandPermissionRule, KilnFileGovernancePolicy, KilnPermissionPolicy, KilnToolPermissionRule } from "./session.js";
|
|
2
|
+
import { WorktreeManager } from "./worktree-manager.js";
|
|
3
|
+
export type CliHarnessProviderId = "claude" | "codex" | "opencode";
|
|
4
|
+
export type DirectApiProviderId = "codex-oauth" | "anthropic" | "openai" | "deepseek" | "openrouter" | "ollama";
|
|
5
|
+
export type ProviderId = CliHarnessProviderId | DirectApiProviderId;
|
|
6
|
+
export type ProviderDisplayGroup = "subscription" | "harness" | "direct-api";
|
|
7
|
+
export interface ProviderDisplayInfo {
|
|
8
|
+
readonly id: ProviderId;
|
|
9
|
+
readonly group: ProviderDisplayGroup;
|
|
10
|
+
readonly models: readonly string[];
|
|
11
|
+
readonly free: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function isDirectApiProvider(provider: ProviderId | undefined): provider is DirectApiProviderId;
|
|
14
|
+
export declare function getProviderDisplayInfo(registry: SessionRegistry): ProviderDisplayInfo[];
|
|
15
|
+
export interface SessionRequirements {
|
|
16
|
+
readonly requiresMcp?: boolean;
|
|
17
|
+
readonly requiresStreaming?: boolean;
|
|
18
|
+
readonly requiresResume?: boolean;
|
|
19
|
+
readonly maxCostTier?: "low" | "medium" | "high";
|
|
20
|
+
readonly preferredProvider?: ProviderId;
|
|
21
|
+
}
|
|
22
|
+
export interface SessionProviderDescriptor {
|
|
23
|
+
readonly id: ProviderId;
|
|
24
|
+
readonly capabilities: SessionCapabilities;
|
|
25
|
+
readonly costTier: "low" | "medium" | "high";
|
|
26
|
+
readonly isAvailable?: () => boolean;
|
|
27
|
+
readonly create: (config: ProviderCreateConfig) => IKilnSession;
|
|
28
|
+
}
|
|
29
|
+
export interface ProviderCreateConfig {
|
|
30
|
+
readonly task: string;
|
|
31
|
+
readonly systemPrompt?: string;
|
|
32
|
+
readonly cwd?: string;
|
|
33
|
+
readonly env?: Record<string, string>;
|
|
34
|
+
readonly mcpServers?: Record<string, {
|
|
35
|
+
command: string;
|
|
36
|
+
args: string[];
|
|
37
|
+
}>;
|
|
38
|
+
readonly permissionPolicy: KilnPermissionPolicy;
|
|
39
|
+
readonly model?: string;
|
|
40
|
+
readonly resumeSessionId?: string;
|
|
41
|
+
readonly ephemeral?: boolean;
|
|
42
|
+
readonly profile?: string;
|
|
43
|
+
readonly skipGitRepoCheck?: boolean;
|
|
44
|
+
readonly outputSchema?: string;
|
|
45
|
+
readonly addDir?: string;
|
|
46
|
+
readonly localProvider?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ClaudeBackendConfig {
|
|
49
|
+
readonly permissionMode: "default" | "acceptEdits" | "bypassPermissions" | "plan";
|
|
50
|
+
readonly allowDangerouslySkipPermissions: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface CodexBackendConfig {
|
|
53
|
+
readonly approvalMode: "never" | "on-request" | "on-failure" | "untrusted";
|
|
54
|
+
readonly sandboxMode: "read-only" | "workspace-write" | "danger-full-access";
|
|
55
|
+
}
|
|
56
|
+
export interface OpenCodeBackendConfig {
|
|
57
|
+
readonly permissionDefault: "ask" | "allow" | "deny";
|
|
58
|
+
}
|
|
59
|
+
export type PermissionTranslationCategory = "tool" | "command" | "file-governance" | "data-firewall" | "agent-scope";
|
|
60
|
+
export interface PermissionTranslationRule {
|
|
61
|
+
readonly category: PermissionTranslationCategory;
|
|
62
|
+
readonly selector: string;
|
|
63
|
+
readonly action: string;
|
|
64
|
+
readonly reason?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ClaudeNativeRules {
|
|
67
|
+
readonly allow: readonly string[];
|
|
68
|
+
readonly deny: readonly string[];
|
|
69
|
+
readonly ask: readonly string[];
|
|
70
|
+
}
|
|
71
|
+
export interface CodexNativeRules {
|
|
72
|
+
readonly coarseOnly: true;
|
|
73
|
+
}
|
|
74
|
+
export interface OpenCodeNativeRules {
|
|
75
|
+
readonly tools: readonly Pick<KilnToolPermissionRule, "tool" | "action">[];
|
|
76
|
+
readonly commands: readonly Pick<KilnCommandPermissionRule, "pattern" | "shell" | "action">[];
|
|
77
|
+
readonly fileGovernance: Required<Pick<KilnFileGovernancePolicy, "denyGlobs" | "askGlobs" | "allowGlobs">>;
|
|
78
|
+
}
|
|
79
|
+
interface BackendTranslationEnvelope<TBackend extends ProviderId, TConfig, TNativeRules> {
|
|
80
|
+
readonly backend: TBackend;
|
|
81
|
+
readonly config: TConfig;
|
|
82
|
+
readonly nativeRules: TNativeRules;
|
|
83
|
+
readonly representableRules: readonly PermissionTranslationRule[];
|
|
84
|
+
readonly unsupportedRules: readonly PermissionTranslationRule[];
|
|
85
|
+
readonly constraintInstructions: readonly string[];
|
|
86
|
+
readonly warnings: readonly string[];
|
|
87
|
+
}
|
|
88
|
+
export type BackendConfig = BackendTranslationEnvelope<"claude", ClaudeBackendConfig, ClaudeNativeRules> | BackendTranslationEnvelope<"codex", CodexBackendConfig, CodexNativeRules> | BackendTranslationEnvelope<"opencode", OpenCodeBackendConfig, OpenCodeNativeRules>;
|
|
89
|
+
export interface ProviderPermissionTranslation {
|
|
90
|
+
readonly provider: DirectApiProviderId;
|
|
91
|
+
readonly unsupportedRules: readonly PermissionTranslationRule[];
|
|
92
|
+
readonly constraintInstructions: readonly string[];
|
|
93
|
+
readonly warnings: readonly string[];
|
|
94
|
+
}
|
|
95
|
+
export declare function translatePermission(policy: KilnPermissionPolicy, backend: "claude" | "codex" | "opencode"): BackendConfig;
|
|
96
|
+
export declare function translatePermissionForProvider(policy: KilnPermissionPolicy, provider: DirectApiProviderId): ProviderPermissionTranslation;
|
|
97
|
+
export interface CandidateScore {
|
|
98
|
+
readonly id: ProviderId;
|
|
99
|
+
readonly score: number;
|
|
100
|
+
readonly reasons: readonly string[];
|
|
101
|
+
readonly excluded: boolean;
|
|
102
|
+
readonly exclusionReason?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface SelectionResult {
|
|
105
|
+
readonly primary: ProviderId;
|
|
106
|
+
readonly orderedFallbacks: readonly ProviderId[];
|
|
107
|
+
readonly scores: readonly CandidateScore[];
|
|
108
|
+
}
|
|
109
|
+
export declare class SessionUnavailableError extends Error {
|
|
110
|
+
readonly requirements: SessionRequirements;
|
|
111
|
+
readonly scores: readonly CandidateScore[];
|
|
112
|
+
constructor(requirements: SessionRequirements, scores: readonly CandidateScore[]);
|
|
113
|
+
}
|
|
114
|
+
export declare class SessionRegistry {
|
|
115
|
+
private readonly providers;
|
|
116
|
+
private readonly circuitBreakers;
|
|
117
|
+
private readonly suppressionWindowMs;
|
|
118
|
+
private readonly failureThreshold;
|
|
119
|
+
constructor(providers: readonly SessionProviderDescriptor[]);
|
|
120
|
+
selectBest(requirements?: SessionRequirements): SelectionResult;
|
|
121
|
+
createSession(id: ProviderId, config: ProviderCreateConfig): IKilnSession;
|
|
122
|
+
reportSuccess(id: ProviderId): void;
|
|
123
|
+
reportFailure(id: ProviderId, _isPreflightCrash: boolean): void;
|
|
124
|
+
getHealth(id: ProviderId): "healthy" | "suppressed" | "half-open";
|
|
125
|
+
list(): readonly (SessionProviderDescriptor & {
|
|
126
|
+
health: "healthy" | "suppressed" | "half-open";
|
|
127
|
+
})[];
|
|
128
|
+
private _isAvailable;
|
|
129
|
+
private _score;
|
|
130
|
+
}
|
|
131
|
+
export declare function createDefaultRegistry(): {
|
|
132
|
+
registry: SessionRegistry;
|
|
133
|
+
worktreeManager: WorktreeManager;
|
|
134
|
+
};
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=session-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../../src/wrapper/session-registry.ts"],"names":[],"mappings":"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"}
|