@jinn-network/jinn-layer 0.1.1 → 0.1.2-canary.15837edd

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.
@@ -4,5 +4,5 @@ export interface FederatedCorpusAdapterDeps {
4
4
  public: CorpusPort;
5
5
  timeoutMs?: number;
6
6
  }
7
- export declare const DEFAULT_FEDERATED_CHILD_TIMEOUT_MS = 5000;
7
+ export declare const DEFAULT_FEDERATED_CHILD_TIMEOUT_MS = 10000;
8
8
  export declare function createFederatedCorpusAdapter(deps: FederatedCorpusAdapterDeps): CorpusPort;
@@ -1,6 +1,8 @@
1
1
  import { degraded, ok, unavailable, valueOr, } from '@jinn-network/plugin';
2
2
  import { LOCAL_EPISODE_REF_PREFIX } from './local-episode-corpus-adapter.js';
3
- export const DEFAULT_FEDERATED_CHILD_TIMEOUT_MS = 5_000;
3
+ // Cold public corpus reads can take longer than five seconds while still
4
+ // completing inside Hermes' 15-second session-pickup deadline.
5
+ export const DEFAULT_FEDERATED_CHILD_TIMEOUT_MS = 10_000;
4
6
  export function createFederatedCorpusAdapter(deps) {
5
7
  const timeoutMs = deps.timeoutMs ?? DEFAULT_FEDERATED_CHILD_TIMEOUT_MS;
6
8
  const openCircuit = new Set();
@@ -8,7 +8,7 @@
8
8
  * `unavailable`) so an adapter never crashes across the port boundary.
9
9
  *
10
10
  * The dependency arrow is one-way: harness-layer imports the ports/schemas
11
- * FROM `@jinn-network/plugin`; the plugin package never imports `client/**`.
11
+ * FROM `@jinn-network/plugin`; the plugin package never imports `operator/**`.
12
12
  */
13
13
  export { createCorpusAdapter } from './corpus-adapter.js';
14
14
  export { episodeToCorpusRecord, type EpisodeRecordProjection } from './episode-record.js';
@@ -8,7 +8,7 @@
8
8
  * `unavailable`) so an adapter never crashes across the port boundary.
9
9
  *
10
10
  * The dependency arrow is one-way: harness-layer imports the ports/schemas
11
- * FROM `@jinn-network/plugin`; the plugin package never imports `client/**`.
11
+ * FROM `@jinn-network/plugin`; the plugin package never imports `operator/**`.
12
12
  */
13
13
  export { createCorpusAdapter } from './corpus-adapter.js';
14
14
  export { episodeToCorpusRecord } from './episode-record.js';
@@ -4,7 +4,7 @@
4
4
  * a corrupt or non-object file ⇒ `{}` (never throws on read). Writes are
5
5
  * atomic (temp file + rename) and create the parent dir on demand.
6
6
  *
7
- * In-package on purpose: harness-layer must NOT reach into `client/src/**`
7
+ * In-package on purpose: harness-layer must NOT reach into `operator/src/**`
8
8
  * (the one-way dependency arrow), so the mineable-store idiom is reproduced
9
9
  * here rather than imported.
10
10
  */
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Implements the VERIFIED verdict→solution join that reaches
5
5
  * the SOLVER's coding patch — the reference implementation is `fetchEvidence` in
6
- * client/scripts/distill-run-live.ts:
6
+ * operator/scripts/distill-run-live.ts:
7
7
  *
8
8
  * verdict(ref.requestId, ref.chainId) → authoritative (taskId, attemptIndex, evaluator)
9
9
  * + bounded verdictEnvelopeMeta candidates → historical publisher,
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Implements the VERIFIED verdict→solution join that reaches
5
5
  * the SOLVER's coding patch — the reference implementation is `fetchEvidence` in
6
- * client/scripts/distill-run-live.ts:
6
+ * operator/scripts/distill-run-live.ts:
7
7
  *
8
8
  * verdict(ref.requestId, ref.chainId) → authoritative (taskId, attemptIndex, evaluator)
9
9
  * + bounded verdictEnvelopeMeta candidates → historical publisher,
@@ -17,7 +17,7 @@
17
17
  * envelope patch).
18
18
  *
19
19
  * The predecessor's `attemptEnvelopeMeta(requestId=verdict.requestId)` join is
20
- * gone: probed live (see client/scripts/distill-run-live.ts), that key does not
20
+ * gone: probed live (see operator/scripts/distill-run-live.ts), that key does not
21
21
  * match, so the join returned empty. The real link runs through the task doc's
22
22
  * chain-indexed verdict/attempt tuple, resolved lazily in the evidence fetcher.
23
23
  *
@@ -17,7 +17,7 @@
17
17
  * envelope patch).
18
18
  *
19
19
  * The predecessor's `attemptEnvelopeMeta(requestId=verdict.requestId)` join is
20
- * gone: probed live (see client/scripts/distill-run-live.ts), that key does not
20
+ * gone: probed live (see operator/scripts/distill-run-live.ts), that key does not
21
21
  * match, so the join returned empty. The real link runs through the task doc's
22
22
  * chain-indexed verdict/attempt tuple, resolved lazily in the evidence fetcher.
23
23
  *
package/dist/cli.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * jinn-layer CLI — the human surface over the harness-layer consume path.
3
3
  *
4
- * Verbs (same command-module spirit as client/src/cli/commands/, kept
4
+ * Verbs (same command-module spirit as operator/src/cli/commands/, kept
5
5
  * self-contained so the package stays embeddable):
6
6
  *
7
7
  * jinn-layer corpus search "<query>" [--limit N] [--json]
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * jinn-layer CLI — the human surface over the harness-layer consume path.
3
3
  *
4
- * Verbs (same command-module spirit as client/src/cli/commands/, kept
4
+ * Verbs (same command-module spirit as operator/src/cli/commands/, kept
5
5
  * self-contained so the package stays embeddable):
6
6
  *
7
7
  * jinn-layer corpus search "<query>" [--limit N] [--json]
package/dist/consume.d.ts CHANGED
@@ -18,7 +18,7 @@ import { type SignedEnvelope } from '@jinn-network/core';
18
18
  export declare const DEFAULT_TESTNET_DISCOVERY_URL = "https://jinn-indexer-production.up.railway.app";
19
19
  /**
20
20
  * Default public IPFS gateway. Mirrors the `ipfsGatewayUrl` zod default in
21
- * client/src/config.ts (inline schema default; not exported as a constant).
21
+ * operator/src/config.ts (inline schema default; not exported as a constant).
22
22
  */
23
23
  export declare const DEFAULT_IPFS_GATEWAY_URL = "https://gateway.autonolas.tech";
24
24
  export interface HarnessLayerConfig {
package/dist/consume.js CHANGED
@@ -22,7 +22,7 @@ import { extractSkill } from './skill.js';
22
22
  export const DEFAULT_TESTNET_DISCOVERY_URL = 'https://jinn-indexer-production.up.railway.app';
23
23
  /**
24
24
  * Default public IPFS gateway. Mirrors the `ipfsGatewayUrl` zod default in
25
- * client/src/config.ts (inline schema default; not exported as a constant).
25
+ * operator/src/config.ts (inline schema default; not exported as a constant).
26
26
  */
27
27
  export const DEFAULT_IPFS_GATEWAY_URL = 'https://gateway.autonolas.tech';
28
28
  const DEFAULT_SEARCH_LIMIT = 50;
@@ -90,7 +90,7 @@ export function createHarnessLayer(config = {}) {
90
90
  // `signer.privateKey` and `selfSafeAddress` are required by CorpusOptions
91
91
  // but unused by the read paths this layer exposes (query / fetchManifest /
92
92
  // ipfs-and-origin acquire). Placeholders, same as the read-only corpus in
93
- // client/src/mcp/server.ts.
93
+ // operator/src/mcp/server.ts.
94
94
  const corpus = createCorpus({
95
95
  discovery,
96
96
  ipfsGatewayUrl: resolved.ipfsGatewayUrl,
@@ -7,7 +7,7 @@
7
7
  * - `corpus-content` — did the repo-slug query find enough evidence that
8
8
  * interactive pickup can actually serve?
9
9
  *
10
- * Both are shared so the Python doctor (apps/jinn-agent/plugins/jinn/doctor.py)
10
+ * Both are shared so the Python doctor (plugin/frozen/doctor.py)
11
11
  * and the layer CLI (`jinn-layer corpus probe`) render identical semantics.
12
12
  *
13
13
  * The content check deliberately mirrors pickup's two-layer, fail-closed
@@ -25,7 +25,7 @@ import type { HarnessLayer, CorpusSearchHit } from './consume.js';
25
25
  export declare const CORPUS_ONBOARDING_K = 3;
26
26
  /**
27
27
  * One doctor check result. Mirrors the Python doctor contract in
28
- * apps/jinn-agent/plugins/jinn/doctor.py: a plain `{name, ok, detail}` dict with
28
+ * plugin/frozen/doctor.py: a plain `{name, ok, detail}` dict with
29
29
  * `remedy` present exactly when `ok` is false — EXCEPT informational checks,
30
30
  * which never carry a remedy even when `ok` is false (there is nothing for the
31
31
  * operator to fix, so there is no copy-paste command to offer). `corpus-content`
@@ -7,7 +7,7 @@
7
7
  * - `corpus-content` — did the repo-slug query find enough evidence that
8
8
  * interactive pickup can actually serve?
9
9
  *
10
- * Both are shared so the Python doctor (apps/jinn-agent/plugins/jinn/doctor.py)
10
+ * Both are shared so the Python doctor (plugin/frozen/doctor.py)
11
11
  * and the layer CLI (`jinn-layer corpus probe`) render identical semantics.
12
12
  *
13
13
  * The content check deliberately mirrors pickup's two-layer, fail-closed
package/dist/index.d.ts CHANGED
@@ -10,7 +10,8 @@ export { corpusProbes, enoughCorpusForRepo, CORPUS_ONBOARDING_K, type DoctorChec
10
10
  export { capture, parseCapturedTask, CapturedTaskSchema, CaptureScrubError, PENDING_ENVELOPE_KIND, type CapturedTask, type CaptureOptions, type PendingEnvelope, type ScrubRedaction, } from './capture.js';
11
11
  export { preview, stripBeforeValues, type ScrubReport, } from './preview.js';
12
12
  export { computeSignal, type SignalInput, type SignalRow, type SignalOptions, } from './signal.js';
13
- export { publish, PublishLedgerError, toPublishedEpisode, toTraceEnvelope, EPISODE_ARTIFACT_TYPE, TRACE_ENVELOPE_ARTIFACT_TYPE, type HarnessPublishDeps, type PublishedResult, type PublishOptions, type PublishResult, } from './publish.js';
13
+ export { publish, publishManifestBatch, PublishLedgerError, toPublishedEpisode, toTraceEnvelope, EPISODE_ARTIFACT_TYPE, TRACE_ENVELOPE_ARTIFACT_TYPE, type HarnessPublishDeps, type ManifestBatchPublishDeps, type ManifestBatchSetResult, type PublishedResult, type PublishOptions, type PublishResult, } from './publish.js';
14
+ export { createEvidenceFetcher } from './bridge-fetch-evidence.js';
14
15
  export { extractSkill, type ExtractedSkill, } from './skill.js';
15
16
  export { SKILL_ARTIFACT_TYPE, SkillArtifactV1Schema, SkillProvenanceSchema, SkillCompanionFileSchema, MAX_SKILL_FILES, MAX_SKILL_TOTAL_DECODED_BYTES, type SkillArtifactV1, type SkillProvenance, type SkillCompanionFile, } from '@jinn-network/core';
16
17
  export { buildSkillMarkdown, parseSkillMarkdown, assertConformantName, SkillPackageMetaSchema, type SkillPackage, type SkillPackageMeta, } from './skill-package.js';
package/dist/index.js CHANGED
@@ -10,7 +10,8 @@ export { corpusProbes, enoughCorpusForRepo, CORPUS_ONBOARDING_K, } from './corpu
10
10
  export { capture, parseCapturedTask, CapturedTaskSchema, CaptureScrubError, PENDING_ENVELOPE_KIND, } from './capture.js';
11
11
  export { preview, stripBeforeValues, } from './preview.js';
12
12
  export { computeSignal, } from './signal.js';
13
- export { publish, PublishLedgerError, toPublishedEpisode, toTraceEnvelope, EPISODE_ARTIFACT_TYPE, TRACE_ENVELOPE_ARTIFACT_TYPE, } from './publish.js';
13
+ export { publish, publishManifestBatch, PublishLedgerError, toPublishedEpisode, toTraceEnvelope, EPISODE_ARTIFACT_TYPE, TRACE_ENVELOPE_ARTIFACT_TYPE, } from './publish.js';
14
+ export { createEvidenceFetcher } from './bridge-fetch-evidence.js';
14
15
  export { extractSkill, } from './skill.js';
15
16
  export { SKILL_ARTIFACT_TYPE, SkillArtifactV1Schema, SkillProvenanceSchema, SkillCompanionFileSchema, MAX_SKILL_FILES, MAX_SKILL_TOTAL_DECODED_BYTES, } from '@jinn-network/core';
16
17
  export { buildSkillMarkdown, parseSkillMarkdown, assertConformantName, SkillPackageMetaSchema, } from './skill-package.js';
package/dist/ipfs-cid.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { createHash } from 'node:crypto';
3
3
  /**
4
4
  * CID validation for harness-layer network boundaries. Keep this package-local:
5
- * the harness-layer ↔ client/src architecture seam is shrink-only.
5
+ * the harness-layer ↔ operator/src architecture seam is shrink-only.
6
6
  *
7
7
  * The live Autonolas registry emits CIDv1 raw objects, including the historical
8
8
  * base16 form `f01551220<sha256>`. We deliberately support only the two codecs
package/dist/ledger.d.ts CHANGED
@@ -26,8 +26,8 @@ export declare const LedgerEntrySchema: z.ZodObject<{
26
26
  }, z.core.$strict>;
27
27
  export type LedgerEntry = z.infer<typeof LedgerEntrySchema>;
28
28
  /**
29
- * Fork-shaped projection of a ledger entry — the row shape the TUI consumer
30
- * (`apps/jinn-agent/plugins/jinn/ledger_view.py`, `rows_from_json`) reads.
29
+ * Fork-shaped projection of a ledger entry — the row shape the frozen
30
+ * 0.1.2 TUI consumer reads.
31
31
  * `state` is absent for published rows; the schema also accepts a `failed`
32
32
  * state for forward-compat, even though `toLedgerRow` never emits it.
33
33
  */
package/dist/ledger.js CHANGED
@@ -26,8 +26,8 @@ export const LedgerEntrySchema = z.strictObject({
26
26
  status: z.enum(['published', 'vetoed (local only)']),
27
27
  });
28
28
  /**
29
- * Fork-shaped projection of a ledger entry — the row shape the TUI consumer
30
- * (`apps/jinn-agent/plugins/jinn/ledger_view.py`, `rows_from_json`) reads.
29
+ * Fork-shaped projection of a ledger entry — the row shape the frozen
30
+ * 0.1.2 TUI consumer reads.
31
31
  * `state` is absent for published rows; the schema also accepts a `failed`
32
32
  * state for forward-compat, even though `toLedgerRow` never emits it.
33
33
  */
@@ -3,7 +3,7 @@
3
3
  * (spec/2026-07-06-distillation-v1.md §11, D9/D11).
4
4
  *
5
5
  * REUSES the capability-eval rig — `comparePaired` / `mcnemarExact` (exact
6
- * McNemar) from `client/src/eval/paired.ts`. This module is only the analysis
6
+ * McNemar) from `operator/src/eval/paired.ts`. This module is only the analysis
7
7
  * layer that composes those into the three-arm gate; the actual per-arm run
8
8
  * (executing the harness against the `cap-v0` slate with each corpus snapshot
9
9
  * pre-installed, graded by the swe-rebench-v2 grader) is wired at run time and
@@ -3,7 +3,7 @@
3
3
  * (spec/2026-07-06-distillation-v1.md §11, D9/D11).
4
4
  *
5
5
  * REUSES the capability-eval rig — `comparePaired` / `mcnemarExact` (exact
6
- * McNemar) from `client/src/eval/paired.ts`. This module is only the analysis
6
+ * McNemar) from `operator/src/eval/paired.ts`. This module is only the analysis
7
7
  * layer that composes those into the three-arm gate; the actual per-arm run
8
8
  * (executing the harness against the `cap-v0` slate with each corpus snapshot
9
9
  * pre-installed, graded by the swe-rebench-v2 grader) is wired at run time and
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * This is the **distilled-skill producer** #1394 anticipated but did not ship:
7
7
  * the artifact payload is the canonical `SkillArtifactV1`
8
- * (client/src/types/skill-artifact.ts) with `provenance.kind: 'distilled'` and
8
+ * (operator/src/types/skill-artifact.ts) with `provenance.kind: 'distilled'` and
9
9
  * the DR-2026-07-06 distill fields (`skillKind`, `distillPromptSha256`,
10
10
  * `distribution`, `verifiabilityTier`). The stored `skill.skillMd` is rendered
11
11
  * WITHOUT the `metadata.jinn` frontmatter block — the structured provenance
@@ -73,7 +73,7 @@ export interface PublishSkillResult {
73
73
  * Lifecycle is *content* — not an injected collaborator — so it rides an
74
74
  * optional param, preserving the deps/content seam and keeping every existing
75
75
  * 2-arg call site working. Honored at read time only when the successor's
76
- * operator matches the superseded record's operator (client/.../consume.ts).
76
+ * operator matches the superseded record's operator (operator/.../consume.ts).
77
77
  */
78
78
  export interface SkillLifecycle {
79
79
  /** Envelope/manifest CID of the prior record this one replaces. */
@@ -10,7 +10,7 @@
10
10
  * (a `skipped` row; no new envelope); re-running over CHANGED content
11
11
  * republishes and points the new record's provenance at the prior
12
12
  * `envelopeRef` via `supersedes` — skills carry it in
13
- * `SkillArtifactV1.provenance.supersedes` (client/src/types/skill-artifact.ts,
13
+ * `SkillArtifactV1.provenance.supersedes` (operator/src/types/skill-artifact.ts,
14
14
  * already schema'd for this, issue #1462); episodes carry it in the
15
15
  * `seed.attribution` step attribute (episode-fetch.ts's step convention),
16
16
  * since the frozen `jinn.trace-envelope.v0` has no top-level field for it.
@@ -10,7 +10,7 @@
10
10
  * (a `skipped` row; no new envelope); re-running over CHANGED content
11
11
  * republishes and points the new record's provenance at the prior
12
12
  * `envelopeRef` via `supersedes` — skills carry it in
13
- * `SkillArtifactV1.provenance.supersedes` (client/src/types/skill-artifact.ts,
13
+ * `SkillArtifactV1.provenance.supersedes` (operator/src/types/skill-artifact.ts,
14
14
  * already schema'd for this, issue #1462); episodes carry it in the
15
15
  * `seed.attribution` step attribute (episode-fetch.ts's step convention),
16
16
  * since the frozen `jinn.trace-envelope.v0` has no top-level field for it.
@@ -4,7 +4,7 @@ export { SKILL_ARTIFACT_TYPE };
4
4
  /**
5
5
  * The distiller-side provenance meta carried on a `SkillPackage` (and embedded
6
6
  * as `metadata.jinn` frontmatter in EXPORT renders). The canonical stored form
7
- * is `SkillProvenanceSchema` in `client/src/types/skill-artifact.ts`;
7
+ * is `SkillProvenanceSchema` in `operator/src/types/skill-artifact.ts`;
8
8
  * `publishSkill()` maps this onto it (`provenance` → `sourceEnvelopeCids`,
9
9
  * `distilledFrom` is derived as its length there and not stored twice).
10
10
  */
@@ -7,7 +7,7 @@
7
7
  * so it is drop-in installable by the wider `skills` ecosystem.
8
8
  *
9
9
  * Division of labour after the #1394 reconciliation:
10
- * - `client/src/types/skill-artifact.ts` (#1394, shipped) owns the CANONICAL
10
+ * - `operator/src/types/skill-artifact.ts` (#1394, shipped) owns the CANONICAL
11
11
  * stored form: `SkillArtifactV1` with structured `SkillProvenanceSchema`.
12
12
  * - `./skill.ts` (shipped) owns consume-side recognition (`extractSkill`).
13
13
  * - THIS module is the distiller-side package builder/renderer: the
@@ -28,7 +28,7 @@ const NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
28
28
  /**
29
29
  * The distiller-side provenance meta carried on a `SkillPackage` (and embedded
30
30
  * as `metadata.jinn` frontmatter in EXPORT renders). The canonical stored form
31
- * is `SkillProvenanceSchema` in `client/src/types/skill-artifact.ts`;
31
+ * is `SkillProvenanceSchema` in `operator/src/types/skill-artifact.ts`;
32
32
  * `publishSkill()` maps this onto it (`provenance` → `sourceEnvelopeCids`,
33
33
  * `distilledFrom` is derived as its length there and not stored twice).
34
34
  */
@@ -3,7 +3,7 @@
3
3
  * lookup (issue #1472, spec §8).
4
4
  *
5
5
  * The engine tars each solve's working dir into a `system_snapshot` artifact
6
- * (hand-rolled POSIX ustar + gzip, `client/src/harnesses/engine/packaging.ts`
6
+ * (hand-rolled POSIX ustar + gzip, `operator/src/harnesses/engine/packaging.ts`
7
7
  * `createWorkdirTarball`) and publishes it donation-wrapped
8
8
  * (`jinn.artifact.donation.v1`: JSON with base64 `data`). Inside is the
9
9
  * harness's raw stdout transcript (`.claude-code/stdout.jsonl`,
@@ -3,7 +3,7 @@
3
3
  * lookup (issue #1472, spec §8).
4
4
  *
5
5
  * The engine tars each solve's working dir into a `system_snapshot` artifact
6
- * (hand-rolled POSIX ustar + gzip, `client/src/harnesses/engine/packaging.ts`
6
+ * (hand-rolled POSIX ustar + gzip, `operator/src/harnesses/engine/packaging.ts`
7
7
  * `createWorkdirTarball`) and publishes it donation-wrapped
8
8
  * (`jinn.artifact.donation.v1`: JSON with base64 `data`). Inside is the
9
9
  * harness's raw stdout transcript (`.claude-code/stdout.jsonl`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jinn-network/jinn-layer",
3
- "version": "0.1.1",
3
+ "version": "0.1.2-canary.15837edd",
4
4
  "description": "Standalone Jinn plugin process layer: host contract, local evidence, corpus reads, distillation, and seed import.",
5
5
  "type": "module",
6
6
  "packageManager": "yarn@4.13.0",
@@ -38,14 +38,14 @@
38
38
  "test": "vitest run"
39
39
  },
40
40
  "dependencies": {
41
- "@jinn-network/core": "0.1.1",
42
- "@jinn-network/plugin": "0.1.1",
41
+ "@jinn-network/core": "0.1.2-canary.15837edd",
42
+ "@jinn-network/plugin": "0.1.2-canary.15837edd",
43
43
  "@modelcontextprotocol/sdk": "^1.27.1",
44
44
  "better-sqlite3": "^12.10.0",
45
45
  "canonicalize": "^3.0.0",
46
46
  "viem": "^2.0.0",
47
47
  "yaml": "^2.8.4",
48
- "zod": "^4.4.3"
48
+ "zod": "4.4.3"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/better-sqlite3": "^7.6.0",