@jinn-network/client 0.1.9-canary.5c19fc6d → 0.1.9-canary.5ff3d8cb
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/CONTRIBUTING.md +2 -2
- package/dist/adapters/mech/adapter.d.ts +10 -0
- package/dist/adapters/mech/adapter.js +19 -1
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +1 -88
- package/dist/adapters/mech/types.js +1 -45
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +18 -3
- package/dist/api/bootstrap-endpoint.js +3 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/gather-status.js +6 -5
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/launcher-endpoints.js +6 -1
- package/dist/api/launcher-endpoints.js.map +1 -1
- package/dist/api/launcher-status.d.ts +2 -0
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +47 -0
- package/dist/api/launcher-tasks.js +88 -3
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +2 -2
- package/dist/api/loop-completion-build.js +2 -3
- package/dist/api/loop-completion-build.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +2 -1
- package/dist/api/portfolio-v0-build.js +5 -7
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +2 -2
- package/dist/api/prediction-v1-build.js +5 -7
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +4 -0
- package/dist/api/setup-endpoints.js +13 -7
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/status-build.js +1 -4
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +1 -1
- package/dist/api/task-runs-build.d.ts +2 -2
- package/dist/api/task-runs-build.js +5 -7
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/bin/jinn-distill-mcp.js +813 -0
- package/dist/bin/jinn-layer.js +4992 -1151
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/distil-export.d.ts +54 -0
- package/dist/captures/distil-export.js +135 -0
- package/dist/captures/distil-export.js.map +1 -0
- package/dist/captures/ingest.d.ts +21 -0
- package/dist/captures/ingest.js +144 -0
- package/dist/captures/ingest.js.map +1 -0
- package/dist/captures/live-publisher.js +4 -3
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +4 -0
- package/dist/captures/publish.js +2 -2
- package/dist/captures/publish.js.map +1 -1
- package/dist/cli/execution-context.js +2 -1
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/config.js +34 -1
- package/dist/config.js.map +1 -1
- package/dist/contracts/abis.d.ts +100 -0
- package/dist/contracts/abis.js +58 -0
- package/dist/contracts/abis.js.map +1 -0
- package/dist/contracts/addresses.d.ts +36 -0
- package/dist/contracts/addresses.js +60 -0
- package/dist/contracts/addresses.js.map +1 -0
- package/dist/corpus/onchain-query.d.ts +0 -1
- package/dist/corpus/onchain-query.js +2 -5
- package/dist/corpus/onchain-query.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +27 -12
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/creator.js +15 -13
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.js +35 -13
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/loop-heartbeat.d.ts +62 -7
- package/dist/daemon/loop-heartbeat.js +50 -13
- package/dist/daemon/loop-heartbeat.js.map +1 -1
- package/dist/{api/peers.js → daemon/peer-sync.js} +2 -2
- package/dist/daemon/peer-sync.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +27 -12
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +0 -6
- package/dist/daemon/spend-cap-gate.js +1 -8
- package/dist/daemon/spend-cap-gate.js.map +1 -1
- package/dist/dashboard/assets/index-BdGCkGPF.js +157 -0
- package/dist/dashboard/assets/index-D7rvJRNa.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.js +83 -1
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +16 -8
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +43 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +10 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap-run.d.ts +25 -0
- package/dist/earning/bootstrap-run.js +315 -0
- package/dist/earning/bootstrap-run.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +6 -11
- package/dist/earning/bootstrap.js +45 -195
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +2 -3
- package/dist/earning/contracts.js +12 -21
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/master-gas.d.ts +10 -0
- package/dist/earning/master-gas.js +11 -0
- package/dist/earning/master-gas.js.map +1 -0
- package/dist/earning/safe-adapter.js +1 -45
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/steps/context.d.ts +42 -0
- package/dist/earning/steps/context.js +4 -0
- package/dist/earning/steps/context.js.map +1 -0
- package/dist/earning/steps/fleet-identity-register.d.ts +4 -0
- package/dist/earning/steps/fleet-identity-register.js +65 -0
- package/dist/earning/steps/fleet-identity-register.js.map +1 -0
- package/dist/earning/steps/fleet-safe-deploy.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-deploy.js +62 -0
- package/dist/earning/steps/fleet-safe-deploy.js.map +1 -0
- package/dist/earning/steps/fleet-safe-predict.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-predict.js +18 -0
- package/dist/earning/steps/fleet-safe-predict.js.map +1 -0
- package/dist/earning/steps/receipt-parsing.d.ts +12 -0
- package/dist/earning/steps/receipt-parsing.js +71 -0
- package/dist/earning/steps/receipt-parsing.js.map +1 -0
- package/dist/earning/stolas-staking.js +20 -14
- package/dist/earning/stolas-staking.js.map +1 -1
- package/dist/erc8004/addresses.d.ts +6 -5
- package/dist/erc8004/addresses.js +7 -5
- package/dist/erc8004/addresses.js.map +1 -1
- package/dist/erc8004/identity.d.ts +12 -1
- package/dist/erc8004/identity.js +31 -0
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/erc8004/reputation.js +16 -12
- package/dist/erc8004/reputation.js.map +1 -1
- package/dist/erc8004/validation.js +5 -4
- package/dist/erc8004/validation.js.map +1 -1
- package/dist/eval/capability-slate.d.ts +54 -0
- package/dist/eval/capability-slate.js +116 -0
- package/dist/eval/capability-slate.js.map +1 -0
- package/dist/eval/capability-stats.d.ts +39 -0
- package/dist/eval/capability-stats.js +123 -0
- package/dist/eval/capability-stats.js.map +1 -0
- package/dist/eval/contested-band.d.ts +18 -0
- package/dist/eval/contested-band.js +19 -0
- package/dist/eval/contested-band.js.map +1 -0
- package/dist/eval/corpus-index.d.ts +21 -0
- package/dist/eval/corpus-index.js +55 -0
- package/dist/eval/corpus-index.js.map +1 -0
- package/dist/eval/disjointness.d.ts +26 -0
- package/dist/eval/disjointness.js +67 -0
- package/dist/eval/disjointness.js.map +1 -0
- package/dist/eval/mcnemar-power.d.ts +14 -0
- package/dist/eval/mcnemar-power.js +40 -0
- package/dist/eval/mcnemar-power.js.map +1 -0
- package/dist/harnesses/engine/engine.d.ts +2 -1
- package/dist/harnesses/engine/engine.js +15 -2
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +2 -61
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/_evaluator-base.d.ts +48 -0
- package/dist/harnesses/impls/_evaluator-base.js +35 -0
- package/dist/harnesses/impls/_evaluator-base.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +2 -3
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +29 -99
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js +4 -21
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +30 -79
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js +4 -19
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.d.ts +39 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js +62 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.d.ts +40 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js +44 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.d.ts +56 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js +79 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +3 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.js +39 -4
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +10 -29
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +10 -23
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +10 -25
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +8 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/learner/verification-gate.d.ts +53 -0
- package/dist/learner/verification-gate.js +80 -0
- package/dist/learner/verification-gate.js.map +1 -0
- package/dist/main.js +74 -457
- package/dist/main.js.map +1 -1
- package/dist/monitoring/net-liveness.d.ts +143 -0
- package/dist/monitoring/net-liveness.js +301 -0
- package/dist/monitoring/net-liveness.js.map +1 -0
- package/dist/observability/progress.d.ts +11 -0
- package/dist/observability/progress.js +16 -0
- package/dist/observability/progress.js.map +1 -0
- package/dist/pilot/cost.d.ts +19 -0
- package/dist/pilot/cost.js +31 -0
- package/dist/pilot/cost.js.map +1 -0
- package/dist/pilot/instance.d.ts +20 -0
- package/dist/pilot/instance.js +19 -0
- package/dist/pilot/instance.js.map +1 -0
- package/dist/pilot/repo.d.ts +31 -0
- package/dist/pilot/repo.js +42 -0
- package/dist/pilot/repo.js.map +1 -0
- package/dist/pilot/solve.d.ts +22 -0
- package/dist/pilot/solve.js +37 -0
- package/dist/pilot/solve.js.map +1 -0
- package/dist/pilot/tally.d.ts +35 -0
- package/dist/pilot/tally.js +61 -0
- package/dist/pilot/tally.js.map +1 -0
- package/dist/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/dist/plugins/local-trace-distiller/.mcp.json +8 -0
- package/dist/plugins/local-trace-distiller/README.md +27 -0
- package/dist/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/dist/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/preflight/rpc-network.d.ts +10 -3
- package/dist/preflight/rpc-network.js +46 -13
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/preflight/stable-cwd.d.ts +29 -0
- package/dist/preflight/stable-cwd.js +98 -0
- package/dist/preflight/stable-cwd.js.map +1 -0
- package/dist/solvernets/launched-record-dispatcher.js +6 -0
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/spend/credential.d.ts +2 -2
- package/dist/spend/credential.js +9 -3
- package/dist/spend/credential.js.map +1 -1
- package/dist/spend/spend-cap.d.ts +10 -0
- package/dist/spend/spend-cap.js +13 -0
- package/dist/spend/spend-cap.js.map +1 -0
- package/dist/store/store.d.ts +14 -0
- package/dist/store/store.js +10 -1
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/processors/identity-scrub.js +22 -3
- package/dist/trajectory/processors/identity-scrub.js.map +1 -1
- package/dist/trajectory/scrub/build.d.ts +19 -0
- package/dist/trajectory/scrub/build.js +25 -0
- package/dist/trajectory/scrub/build.js.map +1 -1
- package/dist/trajectory/scrub/layer2.d.ts +23 -0
- package/dist/trajectory/scrub/layer2.js +33 -0
- package/dist/trajectory/scrub/layer2.js.map +1 -0
- package/dist/trajectory/scrub/openredaction-stage.d.ts +127 -0
- package/dist/trajectory/scrub/openredaction-stage.js +186 -2
- package/dist/trajectory/scrub/openredaction-stage.js.map +1 -1
- package/dist/trajectory/scrub/pipeline.d.ts +21 -0
- package/dist/trajectory/scrub/pipeline.js +57 -0
- package/dist/trajectory/scrub/pipeline.js.map +1 -1
- package/dist/trajectory/scrub/plain-patterns-stage.d.ts +14 -1
- package/dist/trajectory/scrub/plain-patterns-stage.js +35 -5
- package/dist/trajectory/scrub/plain-patterns-stage.js.map +1 -1
- package/dist/trajectory/scrub/secretlint-stage.d.ts +22 -3
- package/dist/trajectory/scrub/secretlint-stage.js +118 -27
- package/dist/trajectory/scrub/secretlint-stage.js.map +1 -1
- package/dist/trajectory/transcript-watcher.d.ts +26 -0
- package/dist/trajectory/transcript-watcher.js +33 -0
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/types/skill-artifact.d.ts +442 -0
- package/dist/types/skill-artifact.js +137 -0
- package/dist/types/skill-artifact.js.map +1 -0
- package/dist/types/task-run-read-model.d.ts +21 -0
- package/dist/types/task-run-read-model.js +2 -0
- package/dist/types/task-run-read-model.js.map +1 -0
- package/dist/types/task-run.d.ts +75 -0
- package/dist/types/task-run.js +2 -0
- package/dist/types/task-run.js.map +1 -0
- package/dist/util/redact-rpc-urls.d.ts +1 -1
- package/dist/util/redact-rpc-urls.js +57 -2
- package/dist/util/redact-rpc-urls.js.map +1 -1
- package/package.json +11 -8
- package/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/plugins/local-trace-distiller/.mcp.json +8 -0
- package/plugins/local-trace-distiller/README.md +27 -0
- package/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/api/peers.js.map +0 -1
- package/dist/dashboard/assets/index-BsrAAmvC.js +0 -171
- package/dist/dashboard/assets/index-DQOWJ2SF.css +0 -1
- /package/dist/{api/peers.d.ts → daemon/peer-sync.d.ts} +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { nonInferiorityVerdict, pairedCostVerdict } from '../eval/capability-stats.js';
|
|
2
|
+
/** One-sided Wilcoxon signed-rank cannot reject below ~5 non-zero diffs
|
|
3
|
+
* (1/2^n ≥ α for n < 5), so a 'lower'/'not-lower' verdict on fewer is unpowered. */
|
|
4
|
+
const WILCOXON_MIN_REJECTABLE_N = 5;
|
|
5
|
+
export function tallyPilot(outcomes, opts) {
|
|
6
|
+
const byTask = new Map();
|
|
7
|
+
for (const o of outcomes)
|
|
8
|
+
(byTask.get(o.instance_id) ?? byTask.set(o.instance_id, []).get(o.instance_id)).push(o);
|
|
9
|
+
const rates = [];
|
|
10
|
+
const costDiffs = [];
|
|
11
|
+
let excluded = 0;
|
|
12
|
+
let aPassTot = 0, aTot = 0, bPassTot = 0, bTot = 0, bothSolve = 0;
|
|
13
|
+
for (const [, os] of byTask) {
|
|
14
|
+
const A = os.filter((o) => o.arm === 'A');
|
|
15
|
+
const B = os.filter((o) => o.arm === 'B');
|
|
16
|
+
const gradedA = A.filter((o) => o.passed !== null);
|
|
17
|
+
const gradedB = B.filter((o) => o.passed !== null);
|
|
18
|
+
if (gradedA.length === 0 || gradedB.length === 0) {
|
|
19
|
+
excluded++;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const pA = gradedA.filter((o) => o.passed === true).length / gradedA.length;
|
|
23
|
+
const pB = gradedB.filter((o) => o.passed === true).length / gradedB.length;
|
|
24
|
+
rates.push({ pA, pB });
|
|
25
|
+
aPassTot += gradedA.filter((o) => o.passed === true).length;
|
|
26
|
+
aTot += gradedA.length;
|
|
27
|
+
bPassTot += gradedB.filter((o) => o.passed === true).length;
|
|
28
|
+
bTot += gradedB.length;
|
|
29
|
+
// both-solve cost: mean cost on the repeats where BOTH arms passed (like-for-like)
|
|
30
|
+
if (pA > 0 && pB > 0) {
|
|
31
|
+
const meanCost = (xs, pass) => {
|
|
32
|
+
const f = xs.filter((o) => o.passed === pass);
|
|
33
|
+
return f.length ? f.reduce((s, o) => s + o.costUsd, 0) / f.length : NaN;
|
|
34
|
+
};
|
|
35
|
+
const ca = meanCost(gradedA, true), cb = meanCost(gradedB, true);
|
|
36
|
+
if (Number.isFinite(ca) && Number.isFinite(cb)) {
|
|
37
|
+
costDiffs.push(cb - ca);
|
|
38
|
+
bothSolve++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const stockBaseRate = aTot > 0 ? aPassTot / aTot : 0;
|
|
43
|
+
const ni = rates.length
|
|
44
|
+
? nonInferiorityVerdict(rates, { rng: opts.rng, stockBaseRate: Math.max(stockBaseRate, 1e-9) })
|
|
45
|
+
: { pass: false, lowerBound: NaN, relativeRegression: NaN, reasons: ['no gradeable pairs'] };
|
|
46
|
+
// pilot scale — small both-solve sets are expected; minN:1 lets the cost verdict go live rather than always 'inconclusive'.
|
|
47
|
+
// The verdict is still surfaced with its n + an `underpowered` flag so a tiny-n read isn't mistaken for a powered one.
|
|
48
|
+
const cost = pairedCostVerdict(costDiffs, { minN: 1 });
|
|
49
|
+
const median = (xs) => { if (!xs.length)
|
|
50
|
+
return NaN; const s = [...xs].sort((a, b) => a - b); const m = s.length >> 1; return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2; };
|
|
51
|
+
return {
|
|
52
|
+
n: rates.length + excluded,
|
|
53
|
+
armA: { resolveRate: stockBaseRate },
|
|
54
|
+
armB: { resolveRate: bTot > 0 ? bPassTot / bTot : 0 },
|
|
55
|
+
bothSolveTasks: bothSolve,
|
|
56
|
+
excluded,
|
|
57
|
+
quality: { lowerBound: ni.lowerBound, nonInferior: ni.pass, deltaPP: 100 * ((bTot > 0 ? bPassTot / bTot : 0) - stockBaseRate) },
|
|
58
|
+
cost: { verdict: cost.verdict, medianDeltaUsd: median(costDiffs), n: cost.n, underpowered: cost.n < WILCOXON_MIN_REJECTABLE_N },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=tally.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tally.js","sourceRoot":"","sources":["../../src/pilot/tally.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "local-trace-distiller",
|
|
3
|
+
"description": "Local trace distillation tools and workflow for deriving experimental skills from private session traces.",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Jinn Network",
|
|
7
|
+
"url": "https://github.com/Jinn-Network/mono"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "local-trace-distiller",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Local trace distillation tools and skill workflow for deriving experimental skills from private session traces.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Jinn Network",
|
|
7
|
+
"url": "https://github.com/Jinn-Network/mono"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Jinn-Network/mono",
|
|
10
|
+
"repository": "https://github.com/Jinn-Network/mono",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"jinn",
|
|
14
|
+
"distill",
|
|
15
|
+
"traces",
|
|
16
|
+
"skills",
|
|
17
|
+
"mcp"
|
|
18
|
+
],
|
|
19
|
+
"skills": "./skills/",
|
|
20
|
+
"mcpServers": "./.mcp.json",
|
|
21
|
+
"interface": {
|
|
22
|
+
"displayName": "Local Trace Distiller",
|
|
23
|
+
"shortDescription": "Derive experimental skills from local traces",
|
|
24
|
+
"longDescription": "Searches local captured session traces, clusters recurring patterns, and runs the existing Jinn distillation flow using the user's selected LLM provider.",
|
|
25
|
+
"developerName": "Jinn Network",
|
|
26
|
+
"category": "Coding",
|
|
27
|
+
"capabilities": [
|
|
28
|
+
"Interactive",
|
|
29
|
+
"Read",
|
|
30
|
+
"Write"
|
|
31
|
+
],
|
|
32
|
+
"websiteURL": "https://github.com/Jinn-Network/mono",
|
|
33
|
+
"privacyPolicyURL": "https://github.com/Jinn-Network/mono",
|
|
34
|
+
"termsOfServiceURL": "https://github.com/Jinn-Network/mono",
|
|
35
|
+
"defaultPrompt": [
|
|
36
|
+
"Use /distill to derive an experimental skill from local traces."
|
|
37
|
+
],
|
|
38
|
+
"brandColor": "#2563EB",
|
|
39
|
+
"screenshots": []
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# local-trace-distiller
|
|
2
|
+
|
|
3
|
+
Local trace distillation plugin for deriving experimental skills from private session traces.
|
|
4
|
+
|
|
5
|
+
## Components
|
|
6
|
+
|
|
7
|
+
- `skills/distill/SKILL.md` — `/distill` workflow. No argument defaults to `this`; `all` runs a capped cluster-first scan.
|
|
8
|
+
- `.mcp.json` — launches `jinn-distil-mcp`.
|
|
9
|
+
- `jinn-distil-mcp` tools:
|
|
10
|
+
- `distill_trace_search` — compact local trace cards.
|
|
11
|
+
- `distill_trace_read` — scoped trace reads with full-transcript gating.
|
|
12
|
+
- `distill_trace_cluster` — cheap repeated-signal candidate discovery.
|
|
13
|
+
- `distill_local` — confirmed local run through `jinn-layer distil`.
|
|
14
|
+
|
|
15
|
+
## Local Capture Source
|
|
16
|
+
|
|
17
|
+
Stop-hook captures are exported as `CapturedTask` JSON under:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
~/.jinn-client/harness-layer/captures
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Set `JINN_LAYER_CAPTURES_DIR` to override the directory. The MCP server and `jinn-layer distil` use the same directory, so agents can search traces and then invoke the existing distillation flow without a second data path.
|
|
24
|
+
|
|
25
|
+
## Status
|
|
26
|
+
|
|
27
|
+
Generated skills are marked experimental and should be improved through user feedback before they are treated as stable. Public marketplace listing is intentionally out of scope for this version.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jinn-network/local-trace-distiller",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Local trace distillation plugin. Searches private captures, clusters candidate skill opportunities, and invokes the existing Jinn skill distiller locally.",
|
|
5
|
+
"jinn": {
|
|
6
|
+
"supports": [
|
|
7
|
+
"jinn.local-distill"
|
|
8
|
+
],
|
|
9
|
+
"capabilities": {
|
|
10
|
+
"tools": {
|
|
11
|
+
"jinn-local-distill": [
|
|
12
|
+
"distill_trace_search",
|
|
13
|
+
"distill_trace_read",
|
|
14
|
+
"distill_trace_cluster",
|
|
15
|
+
"distill_local",
|
|
16
|
+
"distill_feedback_record"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"mcpServers": {
|
|
21
|
+
"jinn-local-distill": {
|
|
22
|
+
"command": "jinn-distill-mcp",
|
|
23
|
+
"tools": [
|
|
24
|
+
"distill_trace_search",
|
|
25
|
+
"distill_trace_read",
|
|
26
|
+
"distill_trace_cluster",
|
|
27
|
+
"distill_local",
|
|
28
|
+
"distill_feedback_record"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"skills": [
|
|
33
|
+
"skills/distill/SKILL.md"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: distill
|
|
3
|
+
description: Use local trace tools to derive experimental skills from private session traces. Trigger on /distill, "distill this", "distill all", or requests to turn repeated local work into a reusable skill.
|
|
4
|
+
tools: distill_trace_search, distill_trace_read, distill_trace_cluster, distill_local, distill_feedback_record
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Local Trace Distill
|
|
8
|
+
|
|
9
|
+
Use this skill to help the user turn local work traces into experimental skills using the existing Jinn distillation methodology.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
- No argument means `this`: focus on the current or most recent session.
|
|
14
|
+
- `this`, `current`, or `recent`: inspect the most recent local trace cards, choose the best match for the current session, then distill only that trace unless the user chooses a broader set.
|
|
15
|
+
- `all`: run a capped, cheap scan over local trace cards, cluster recurring signals, present candidates, and ask the user which candidate to distill.
|
|
16
|
+
- A trace id, session id, or candidate trace list: inspect those traces and distill only the selected traces.
|
|
17
|
+
|
|
18
|
+
## Tool Workflow
|
|
19
|
+
|
|
20
|
+
1. Start with `distill_trace_search`, using compact cards. Do not read full transcripts first.
|
|
21
|
+
2. For `all`, call `distill_trace_cluster` with a conservative cap. Default to `limit: 50` unless the user requested a different cap.
|
|
22
|
+
3. Read only what is needed:
|
|
23
|
+
- Use `mode: "summary"` for orientation.
|
|
24
|
+
- Use `mode: "tool_calls"` to understand commands and edits.
|
|
25
|
+
- Use `mode: "transcript_excerpt"` with a query when one section matters.
|
|
26
|
+
- Use `mode: "full_transcript"` only when the skill cannot be safely derived from smaller reads, and set `allowFullTranscript: true` only after deciding it is necessary.
|
|
27
|
+
4. Before calling `distill_local`, summarize the proposed source traces and the likely skill opportunity in one short paragraph.
|
|
28
|
+
5. Call `distill_local` with `confirm: true` only after the user explicitly approves the run or has already requested an execution form such as "distill this now".
|
|
29
|
+
6. Pass selected `traceIds` or `sessionIds` whenever the user chose a candidate. Avoid distilling every capture unless the user asked for `all` and then approved that broad run.
|
|
30
|
+
|
|
31
|
+
## Distillation Methodology
|
|
32
|
+
|
|
33
|
+
Reuse the existing Jinn distillation methodology rather than inventing a new prompt:
|
|
34
|
+
|
|
35
|
+
- Prefer evaluator/user-accepted successful traces for success patterns.
|
|
36
|
+
- Use failed or abandoned traces only for concrete lessons and failure avoidances.
|
|
37
|
+
- Keep the skill grounded in repeated evidence when available; label single-trace outputs as experimental.
|
|
38
|
+
- Preserve provenance through the generated skill metadata.
|
|
39
|
+
- Run through the existing scrub, contamination, structure, and package gates via `distill_local`.
|
|
40
|
+
|
|
41
|
+
## User Feedback Loop
|
|
42
|
+
|
|
43
|
+
Generated skills are experimental. After a later session uses one, ask the user whether it helped, hurt, was mixed, or went unused. If the user gives feedback, call `distill_feedback_record` with the skill name, verdict, session id if known, and only user-approved notes or accepted changes. Convert accepted feedback into a targeted skill improvement instead of accumulating broad notes.
|
|
44
|
+
|
|
45
|
+
## Future Marketplace
|
|
46
|
+
|
|
47
|
+
Do not list local skills publicly in this version. Later versions may let users publish useful skills to a marketplace for others to use and pay for, but that requires explicit user approval and a separate publish flow.
|
|
48
|
+
|
|
49
|
+
## Privacy
|
|
50
|
+
|
|
51
|
+
Local traces are private by default. Do not export trace content or generated skills to a remote marketplace or shared corpus unless the user explicitly asks for that future publish flow.
|
|
@@ -48,14 +48,19 @@ export type ProbeOk = {
|
|
|
48
48
|
ok: true;
|
|
49
49
|
host: string;
|
|
50
50
|
latencyMs: number;
|
|
51
|
+
expectedChainId: number;
|
|
52
|
+
actualChainId: number;
|
|
53
|
+
localDev?: true;
|
|
51
54
|
};
|
|
52
55
|
export type ProbeFail = {
|
|
53
56
|
ok: false;
|
|
54
57
|
host: string;
|
|
58
|
+
expectedChainId: number;
|
|
59
|
+
actualChainId?: number;
|
|
55
60
|
/** HTTP status when applicable (4xx / 5xx). */
|
|
56
61
|
code?: number;
|
|
57
62
|
/** Failure shape when no HTTP status is available. */
|
|
58
|
-
reason?: 'unreachable' | 'unknown';
|
|
63
|
+
reason?: 'chain_mismatch' | 'unreachable' | 'unknown';
|
|
59
64
|
message: string;
|
|
60
65
|
};
|
|
61
66
|
export type ProbeResult = ProbeOk | ProbeFail;
|
|
@@ -64,8 +69,9 @@ export interface ProbeFallbackChainOptions {
|
|
|
64
69
|
log?: (message: string) => void;
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
67
|
-
* Probe each URL in a fallback chain with
|
|
68
|
-
* Records ok/latency or a structured failure
|
|
72
|
+
* Probe each URL in a fallback chain with per-slot `eth_chainId` +
|
|
73
|
+
* `eth_blockNumber` calls. Records ok/latency or a structured failure
|
|
74
|
+
* (chain mismatch / HTTP status / unreachable).
|
|
69
75
|
*
|
|
70
76
|
* The probe is **log-only** — it never throws on per-slot failures. Startup
|
|
71
77
|
* gating remains the job of {@link checkRpcNetwork}, which fails loud on
|
|
@@ -73,6 +79,7 @@ export interface ProbeFallbackChainOptions {
|
|
|
73
79
|
*
|
|
74
80
|
* Per AC9 (issue #592): emits one log line per slot
|
|
75
81
|
* `[rpc] <layer> <host> ok latency=Nms`
|
|
82
|
+
* `[rpc] <layer> <host> warn chain_mismatch expected=<id> actual=<id>`
|
|
76
83
|
* `[rpc] <layer> <host> warn <http-status>` (e.g. 429, 503)
|
|
77
84
|
* `[rpc] <layer> <host> warn unreachable: <message>`
|
|
78
85
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createPublicClient, http, HttpRequestError } from 'viem';
|
|
2
|
-
import { base, baseSepolia } from 'viem/chains';
|
|
2
|
+
import { base, baseSepolia, mainnet, sepolia } from 'viem/chains';
|
|
3
3
|
import { describeFallbackChain, maskRpcHost } from '../rpc/transport.js';
|
|
4
4
|
export function expectedChainIdForNetwork(network) {
|
|
5
5
|
return network === 'testnet' ? 84532 : 8453;
|
|
@@ -119,24 +119,35 @@ export function rpcNetworkFailureHint(result) {
|
|
|
119
119
|
}
|
|
120
120
|
return 'Set rpcUrl to a Base mainnet endpoint such as https://mainnet.base.org, or set BASE_RPC_URL.';
|
|
121
121
|
}
|
|
122
|
-
function
|
|
122
|
+
function expectedChainIdForProbe(network, layer) {
|
|
123
|
+
if (layer === 'L1')
|
|
124
|
+
return network === 'testnet' ? sepolia.id : mainnet.id;
|
|
125
|
+
return expectedChainIdForNetwork(network);
|
|
126
|
+
}
|
|
127
|
+
function expectedChainForProbe(network, layer) {
|
|
128
|
+
if (layer === 'L1')
|
|
129
|
+
return network === 'testnet' ? sepolia : mainnet;
|
|
130
|
+
return expectedChainForNetwork(network);
|
|
131
|
+
}
|
|
132
|
+
function classifyProbeError(host, expectedChainId, actualChainId, err) {
|
|
123
133
|
const message = err instanceof Error ? err.message : String(err);
|
|
124
134
|
if (err instanceof HttpRequestError && typeof err.status === 'number') {
|
|
125
|
-
return { ok: false, host, code: err.status, message };
|
|
135
|
+
return { ok: false, host, expectedChainId, actualChainId, code: err.status, message };
|
|
126
136
|
}
|
|
127
137
|
// viem wraps HTTP errors inside other shapes; walk the cause chain.
|
|
128
138
|
let cur = err?.cause;
|
|
129
139
|
while (cur) {
|
|
130
140
|
if (cur instanceof HttpRequestError && typeof cur.status === 'number') {
|
|
131
|
-
return { ok: false, host, code: cur.status, message };
|
|
141
|
+
return { ok: false, host, expectedChainId, actualChainId, code: cur.status, message };
|
|
132
142
|
}
|
|
133
143
|
cur = cur.cause;
|
|
134
144
|
}
|
|
135
|
-
return { ok: false, host, reason: 'unreachable', message };
|
|
145
|
+
return { ok: false, host, expectedChainId, actualChainId, reason: 'unreachable', message };
|
|
136
146
|
}
|
|
137
147
|
/**
|
|
138
|
-
* Probe each URL in a fallback chain with
|
|
139
|
-
* Records ok/latency or a structured failure
|
|
148
|
+
* Probe each URL in a fallback chain with per-slot `eth_chainId` +
|
|
149
|
+
* `eth_blockNumber` calls. Records ok/latency or a structured failure
|
|
150
|
+
* (chain mismatch / HTTP status / unreachable).
|
|
140
151
|
*
|
|
141
152
|
* The probe is **log-only** — it never throws on per-slot failures. Startup
|
|
142
153
|
* gating remains the job of {@link checkRpcNetwork}, which fails loud on
|
|
@@ -144,28 +155,50 @@ function classifyProbeError(host, err) {
|
|
|
144
155
|
*
|
|
145
156
|
* Per AC9 (issue #592): emits one log line per slot
|
|
146
157
|
* `[rpc] <layer> <host> ok latency=Nms`
|
|
158
|
+
* `[rpc] <layer> <host> warn chain_mismatch expected=<id> actual=<id>`
|
|
147
159
|
* `[rpc] <layer> <host> warn <http-status>` (e.g. 429, 503)
|
|
148
160
|
* `[rpc] <layer> <host> warn unreachable: <message>`
|
|
149
161
|
*/
|
|
150
162
|
export async function probeFallbackChain(urls, network, layer, options = {}) {
|
|
151
163
|
const log = options.log ?? ((m) => process.stderr.write(`${m}\n`));
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// since this is just used to satisfy viem's typing.
|
|
155
|
-
const chain = network === 'testnet' ? baseSepolia : base;
|
|
164
|
+
const expectedChainId = expectedChainIdForProbe(network, layer);
|
|
165
|
+
const chain = expectedChainForProbe(network, layer);
|
|
156
166
|
const results = [];
|
|
157
167
|
for (const url of urls) {
|
|
158
168
|
const host = maskRpcHost(url);
|
|
159
169
|
const client = createPublicClient({ chain, transport: http(url, { retryCount: 0 }) });
|
|
160
170
|
const t0 = performance.now();
|
|
171
|
+
let actualChainId;
|
|
161
172
|
try {
|
|
173
|
+
actualChainId = await client.getChainId();
|
|
174
|
+
const localDev = evmLocalDevOverrideAcceptable(expectedChainId, actualChainId, url);
|
|
175
|
+
if (actualChainId !== expectedChainId && !localDev) {
|
|
176
|
+
const failure = {
|
|
177
|
+
ok: false,
|
|
178
|
+
host,
|
|
179
|
+
expectedChainId,
|
|
180
|
+
actualChainId,
|
|
181
|
+
reason: 'chain_mismatch',
|
|
182
|
+
message: `expected chain ${expectedChainId}, got ${actualChainId}`,
|
|
183
|
+
};
|
|
184
|
+
log(`[rpc] ${layer} ${host} warn chain_mismatch expected=${expectedChainId} actual=${actualChainId}`);
|
|
185
|
+
results.push(failure);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
162
188
|
await client.getBlockNumber();
|
|
163
189
|
const latencyMs = Math.max(0, Math.round(performance.now() - t0));
|
|
164
190
|
log(`[rpc] ${layer} ${host} ok latency=${latencyMs}ms`);
|
|
165
|
-
results.push({
|
|
191
|
+
results.push({
|
|
192
|
+
ok: true,
|
|
193
|
+
host,
|
|
194
|
+
latencyMs,
|
|
195
|
+
expectedChainId,
|
|
196
|
+
actualChainId,
|
|
197
|
+
...(localDev ? { localDev: true } : {}),
|
|
198
|
+
});
|
|
166
199
|
}
|
|
167
200
|
catch (err) {
|
|
168
|
-
const failure = classifyProbeError(host, err);
|
|
201
|
+
const failure = classifyProbeError(host, expectedChainId, actualChainId, err);
|
|
169
202
|
if (failure.code !== undefined) {
|
|
170
203
|
log(`[rpc] ${layer} ${host} warn ${failure.code}`);
|
|
171
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-network.js","sourceRoot":"","sources":["../../src/preflight/rpc-network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-network.js","sourceRoot":"","sources":["../../src/preflight/rpc-network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ResolveStableCwdInput {
|
|
2
|
+
currentCwd: string;
|
|
3
|
+
earningDir: string;
|
|
4
|
+
homeDir: string;
|
|
5
|
+
exists: (p: string) => boolean;
|
|
6
|
+
sep?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ResolveStableCwdResult {
|
|
9
|
+
chosenCwd: string;
|
|
10
|
+
needsChdir: boolean;
|
|
11
|
+
logLine: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Pure resolver — no fs/os/process access. All inputs are injected so this can
|
|
15
|
+
* be unit-tested deterministically.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveStableCwd(input: ResolveStableCwdInput): ResolveStableCwdResult;
|
|
18
|
+
/**
|
|
19
|
+
* Real-world wrapper: gathers `process.cwd()`, `os.homedir()`, and `existsSync`,
|
|
20
|
+
* delegates the decision to `resolveStableCwd`, then performs the chdir.
|
|
21
|
+
*
|
|
22
|
+
* `earningDir` comes in as a param to keep this decoupled from the config
|
|
23
|
+
* module. Never crashes boot: a `process.cwd()` read can itself throw ENOENT
|
|
24
|
+
* (when the launch dir was deleted), and `process.chdir` can fail — both are
|
|
25
|
+
* caught and logged.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ensureStableCwd(opts: {
|
|
28
|
+
earningDir: string;
|
|
29
|
+
}): ResolveStableCwdResult;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { sep as pathSep } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Issue #909 — `jinn run` inherits the launch shell's CWD. When the daemon is
|
|
6
|
+
* launched from an ephemeral directory that is later deleted, the process's CWD
|
|
7
|
+
* becomes a dangling inode; child processes (e.g. the `claude` CLI harness
|
|
8
|
+
* probe) call `getcwd()` → ENOENT → exit with "The current working directory
|
|
9
|
+
* was deleted...". The fix: on boot, before spawning any child, chdir to a
|
|
10
|
+
* guaranteed-stable directory under $HOME.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Sentinel used when `process.cwd()` itself throws (the launch dir was deleted).
|
|
14
|
+
* It is a relative non-path: `existsSync` reports it missing and it fails the
|
|
15
|
+
* under-$HOME check, so the resolver is forced to chdir to a stable target.
|
|
16
|
+
*/
|
|
17
|
+
const DELETED_CWD_SENTINEL = '<deleted-cwd>';
|
|
18
|
+
/**
|
|
19
|
+
* Pure resolver — no fs/os/process access. All inputs are injected so this can
|
|
20
|
+
* be unit-tested deterministically.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveStableCwd(input) {
|
|
23
|
+
const { currentCwd, earningDir, homeDir, exists } = input;
|
|
24
|
+
const sep = input.sep ?? pathSep;
|
|
25
|
+
const isUnderHome = currentCwd === homeDir || currentCwd.startsWith(homeDir + sep);
|
|
26
|
+
const currentExists = exists(currentCwd);
|
|
27
|
+
if (currentExists && isUnderHome) {
|
|
28
|
+
return {
|
|
29
|
+
chosenCwd: currentCwd,
|
|
30
|
+
needsChdir: false,
|
|
31
|
+
logLine: `[main] cwd ${currentCwd} is stable; no chdir needed`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Prefer the earning dir, then ~/.jinn-client, then $HOME. The terminal
|
|
35
|
+
// homeDir is the last-resort floor and is chosen even if its exists-probe
|
|
36
|
+
// is false — we never return "nothing".
|
|
37
|
+
const candidates = [earningDir, joinPath(homeDir, '.jinn-client', sep), homeDir];
|
|
38
|
+
let chosenCwd = homeDir;
|
|
39
|
+
for (const candidate of candidates) {
|
|
40
|
+
if (candidate === homeDir || exists(candidate)) {
|
|
41
|
+
chosenCwd = candidate;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
chosenCwd,
|
|
47
|
+
needsChdir: chosenCwd !== currentCwd,
|
|
48
|
+
logLine: `[main] chdir to ${chosenCwd} (was ${currentCwd})`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function joinPath(base, child, sep) {
|
|
52
|
+
return base.endsWith(sep) ? base + child : base + sep + child;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Real-world wrapper: gathers `process.cwd()`, `os.homedir()`, and `existsSync`,
|
|
56
|
+
* delegates the decision to `resolveStableCwd`, then performs the chdir.
|
|
57
|
+
*
|
|
58
|
+
* `earningDir` comes in as a param to keep this decoupled from the config
|
|
59
|
+
* module. Never crashes boot: a `process.cwd()` read can itself throw ENOENT
|
|
60
|
+
* (when the launch dir was deleted), and `process.chdir` can fail — both are
|
|
61
|
+
* caught and logged.
|
|
62
|
+
*/
|
|
63
|
+
export function ensureStableCwd(opts) {
|
|
64
|
+
// process.cwd() throws ENOENT when the current dir's inode is gone. Treat a
|
|
65
|
+
// throw as "cwd is gone": pass a sentinel that the resolver's exists-probe
|
|
66
|
+
// reports as missing, forcing a chdir to a stable target.
|
|
67
|
+
let currentCwd;
|
|
68
|
+
try {
|
|
69
|
+
currentCwd = process.cwd();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
currentCwd = DELETED_CWD_SENTINEL;
|
|
73
|
+
}
|
|
74
|
+
const result = resolveStableCwd({
|
|
75
|
+
currentCwd,
|
|
76
|
+
earningDir: opts.earningDir,
|
|
77
|
+
homeDir: homedir(),
|
|
78
|
+
exists: (p) => {
|
|
79
|
+
try {
|
|
80
|
+
return existsSync(p);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
if (result.needsChdir) {
|
|
88
|
+
try {
|
|
89
|
+
process.chdir(result.chosenCwd);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.warn(`[main] failed to chdir to ${result.chosenCwd}: ${err instanceof Error ? err.message : String(err)} — continuing`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
console.log(result.logLine);
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=stable-cwd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable-cwd.js","sourceRoot":"","sources":["../../src/preflight/stable-cwd.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,6 +146,12 @@ function projectLauncherGeneratorState(raw) {
|
|
|
146
146
|
const poolPublicationCurrentSize = finiteNumber(snapshot['poolPublicationCurrentSize']);
|
|
147
147
|
if (poolPublicationCurrentSize !== undefined)
|
|
148
148
|
projected.poolPublicationCurrentSize = poolPublicationCurrentSize;
|
|
149
|
+
const totalPosted = finiteNumber(snapshot['totalPosted']);
|
|
150
|
+
if (totalPosted !== undefined)
|
|
151
|
+
projected.totalPosted = totalPosted;
|
|
152
|
+
const lastPostedInstanceId = optionalString(snapshot['lastPostedInstanceId']);
|
|
153
|
+
if (lastPostedInstanceId)
|
|
154
|
+
projected.lastPostedInstanceId = lastPostedInstanceId;
|
|
149
155
|
return projected;
|
|
150
156
|
}
|
|
151
157
|
function launcherStateReaderFor(generator) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launched-record-dispatcher.js","sourceRoot":"","sources":["../../src/solvernets/launched-record-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"launched-record-dispatcher.js","sourceRoot":"","sources":["../../src/solvernets/launched-record-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,8 @@ export declare function hasClaudeCodeOnDisk(homeDirOverride?: string): boolean;
|
|
|
15
15
|
/**
|
|
16
16
|
* Does this operator have Codex CLI installed and authed?
|
|
17
17
|
*
|
|
18
|
-
* Codex CLI writes
|
|
19
|
-
* subscription signal.
|
|
18
|
+
* Codex CLI writes OAuth to `$CODEX_HOME/auth.json` in hosted deploys or
|
|
19
|
+
* `~/.codex/auth.json` locally. Presence is the subscription signal.
|
|
20
20
|
*/
|
|
21
21
|
export declare function hasCodexOnDisk(homeDirOverride?: string): boolean;
|
|
22
22
|
/**
|