@hraness/sys1 0.17.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.
@@ -0,0 +1,50 @@
1
+ version: 1
2
+ pack: core
3
+ revision: "2026.09.1"
4
+ description: Experimental advisory checks for two narrow JavaScript and TypeScript changes.
5
+ rules:
6
+ - id: core-new-empty-catch
7
+ applies:
8
+ paths: ["**/*.{js,jsx,mjs,cjs,ts,tsx,mts,cts}"]
9
+ languages: [javascript, typescript]
10
+ ensure: >-
11
+ The change does not introduce a new empty JavaScript or TypeScript catch
12
+ block. A violation requires a complete catch body visible after the
13
+ change, with no executable statement, that was either newly added or
14
+ emptied by removing its last executable statement. Comments, whitespace,
15
+ and empty semicolon statements do not count as executable statements.
16
+ An unchanged or moved empty catch, removal of a catch, an incomplete
17
+ catch body, a Promise.catch callback, or catch text inside a string is
18
+ outside this rule. Any executable statement, including return, makes
19
+ the catch nonempty. Judge only the shown before and after code.
20
+ breaks: >-
21
+ The shown change adds a complete empty catch block or removes every
22
+ executable statement from a retained complete catch block, leaving
23
+ only whitespace, comments, or empty semicolon statements.
24
+ severity: P2
25
+ tiers: { medium: 0.8, high: 0.85 }
26
+ source: { kind: builtin }
27
+ - id: core-removed-test-assertions
28
+ applies:
29
+ paths: ["**/*.{test,spec}.{js,jsx,mjs,cjs,ts,tsx,mts,cts}", "**/{test,tests,__tests__}/**/*.{js,jsx,mjs,cjs,ts,tsx,mts,cts}"]
30
+ languages: [javascript, typescript]
31
+ ensure: >-
32
+ The change does not remove the last visible behavioral assertion from
33
+ a retained JavaScript or TypeScript test callback. A violation requires
34
+ the complete test callback to be visible before and after, a removed
35
+ executable expect matcher, assert check, or explicit throw-on-failure
36
+ check, and no such check remaining or replacing it after. Assertion
37
+ count hints such as expect.assertions or expect.hasAssertions, logging,
38
+ comments, and mock setup are not behavioral assertions. A removed
39
+ whole test, an incomplete callback, a retained or replacement assertion,
40
+ and assertion text in a string are outside this rule. If a new or changed
41
+ helper call could contain a replacement check that is not shown, the
42
+ evidence is insufficient: do not report a violation. Do not infer tests
43
+ or helpers outside the shown code.
44
+ breaks: >-
45
+ A complete retained test callback had an executable behavioral assertion
46
+ before, loses its last such check in this diff, and contains no behavioral
47
+ check or possible replacement assertion helper call afterward.
48
+ severity: P2
49
+ tiers: { medium: 0.7, high: 0.85 }
50
+ source: { kind: builtin }
@@ -0,0 +1,77 @@
1
+ import { z } from "zod";
2
+ import { type SystemOneRequest } from "./protocol.ts";
3
+ declare const profileDefinitionSchema: z.ZodObject<{
4
+ version: z.ZodLiteral<1>;
5
+ id: z.ZodString;
6
+ revision: z.ZodString;
7
+ model: z.ZodString;
8
+ questions: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
9
+ type: z.ZodLiteral<"noul">;
10
+ instructions: z.ZodOptional<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
11
+ criteria: z.ZodOptional<z.ZodNullable<z.ZodObject<{
12
+ true: z.ZodOptional<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
13
+ false: z.ZodOptional<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
14
+ }, z.core.$strict>>>;
15
+ }, z.core.$strict>, z.ZodObject<{
16
+ type: z.ZodLiteral<"choice">;
17
+ instructions: z.ZodOptional<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
18
+ criteria: z.ZodRecord<z.ZodString, z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
19
+ }, z.core.$strict>, z.ZodObject<{
20
+ type: z.ZodLiteral<"score">;
21
+ instructions: z.ZodOptional<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
22
+ criteria: z.ZodArray<z.ZodType<import("./protocol.ts").EntryType, unknown, z.core.$ZodTypeInternals<import("./protocol.ts").EntryType, unknown>>>;
23
+ }, z.core.$strict>], "type">>;
24
+ }, z.core.$strict>;
25
+ export type ProfileDefinition = z.infer<typeof profileDefinitionSchema>;
26
+ export type ReadonlyJsonValue = string | number | boolean | null | readonly ReadonlyJsonValue[] | {
27
+ readonly [key: string]: ReadonlyJsonValue;
28
+ };
29
+ export type ReadonlyEntryType = string | null | readonly ReadonlyJsonValue[] | {
30
+ readonly [key: string]: ReadonlyJsonValue;
31
+ };
32
+ export type ReadonlyProfileQuestion = {
33
+ readonly type: "noul";
34
+ readonly instructions?: ReadonlyEntryType | undefined;
35
+ readonly criteria?: {
36
+ readonly true?: ReadonlyEntryType | undefined;
37
+ readonly false?: ReadonlyEntryType | undefined;
38
+ } | null | undefined;
39
+ } | {
40
+ readonly type: "choice";
41
+ readonly instructions?: ReadonlyEntryType | undefined;
42
+ readonly criteria: {
43
+ readonly [key: string]: ReadonlyEntryType;
44
+ };
45
+ } | {
46
+ readonly type: "score";
47
+ readonly instructions?: ReadonlyEntryType | undefined;
48
+ readonly criteria: readonly ReadonlyEntryType[];
49
+ };
50
+ export interface ReadonlyProfileDefinition {
51
+ readonly version: 1;
52
+ readonly id: string;
53
+ readonly revision: string;
54
+ readonly model: string;
55
+ readonly questions: {
56
+ readonly [key: string]: ReadonlyProfileQuestion;
57
+ };
58
+ }
59
+ export interface DecisionProfile {
60
+ /** Frozen local identity and decision recipe. Never sent on the wire. */
61
+ readonly definition: ReadonlyProfileDefinition;
62
+ /** Compose a fresh ordinary request; no interpolation, overrides, or I/O. */
63
+ request(state: unknown): SystemOneRequest;
64
+ }
65
+ export type ProfileErrorCode = "invalid_profile" | "invalid_request";
66
+ /** Contains no supplied identifiers, instructions, states, or validation details. */
67
+ export declare class Sys1ProfileError extends Error {
68
+ readonly code: ProfileErrorCode;
69
+ constructor(code: ProfileErrorCode);
70
+ }
71
+ /**
72
+ * A named, revisioned decision recipe for a gateway or embedded router.
73
+ * The exact backend/model pin keeps the router from silently switching routes;
74
+ * operators remain responsible for verifying the model served at that endpoint.
75
+ */
76
+ export declare function createProfile(input: unknown): DecisionProfile;
77
+ export {};
@@ -0,0 +1,148 @@
1
+ import { z } from "zod";
2
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ export type EntryType = string | null | JsonValue[] | {
6
+ [key: string]: JsonValue;
7
+ };
8
+ export declare const PROTOCOL_LIMITS: {
9
+ readonly maxBodyBytes: 1048576;
10
+ readonly maxStateBytes: 262144;
11
+ readonly maxQuestions: 64;
12
+ readonly maxQuestionNameChars: 128;
13
+ readonly maxInstructionsChars: 4096;
14
+ readonly maxCriterionChars: 1024;
15
+ readonly maxOptionChars: 256;
16
+ readonly maxChoiceOptions: 255;
17
+ readonly minScoreLevels: 2;
18
+ readonly maxScoreLevels: 10;
19
+ readonly maxModelChars: 128;
20
+ };
21
+ export declare const entrySchema: z.ZodType<EntryType>;
22
+ export declare const noulQuestionSchema: z.ZodObject<{
23
+ type: z.ZodLiteral<"noul">;
24
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
25
+ criteria: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26
+ true: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
27
+ false: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
28
+ }, z.core.$strip>>>;
29
+ }, z.core.$strip>;
30
+ export declare const choiceQuestionSchema: z.ZodObject<{
31
+ type: z.ZodLiteral<"choice">;
32
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
33
+ criteria: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
34
+ }, z.core.$strip>;
35
+ export declare const scoreQuestionSchema: z.ZodObject<{
36
+ type: z.ZodLiteral<"score">;
37
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
38
+ criteria: z.ZodArray<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
39
+ }, z.core.$strip>;
40
+ export declare const questionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
41
+ type: z.ZodLiteral<"noul">;
42
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
43
+ criteria: z.ZodOptional<z.ZodNullable<z.ZodObject<{
44
+ true: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
45
+ false: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
46
+ }, z.core.$strip>>>;
47
+ }, z.core.$strip>, z.ZodObject<{
48
+ type: z.ZodLiteral<"choice">;
49
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
50
+ criteria: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
51
+ }, z.core.$strip>, z.ZodObject<{
52
+ type: z.ZodLiteral<"score">;
53
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
54
+ criteria: z.ZodArray<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
55
+ }, z.core.$strip>], "type">;
56
+ export declare const systemOneRequestSchema: z.ZodObject<{
57
+ model: z.ZodOptional<z.ZodString>;
58
+ state: z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>;
59
+ questions: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
60
+ type: z.ZodLiteral<"noul">;
61
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
62
+ criteria: z.ZodOptional<z.ZodNullable<z.ZodObject<{
63
+ true: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
64
+ false: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
65
+ }, z.core.$strip>>>;
66
+ }, z.core.$strip>, z.ZodObject<{
67
+ type: z.ZodLiteral<"choice">;
68
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
69
+ criteria: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
70
+ }, z.core.$strip>, z.ZodObject<{
71
+ type: z.ZodLiteral<"score">;
72
+ instructions: z.ZodOptional<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
73
+ criteria: z.ZodArray<z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
74
+ }, z.core.$strip>], "type">>;
75
+ }, z.core.$strip>;
76
+ export type NoulQuestion = z.infer<typeof noulQuestionSchema>;
77
+ export type ChoiceQuestion = z.infer<typeof choiceQuestionSchema>;
78
+ export type ScoreQuestion = z.infer<typeof scoreQuestionSchema>;
79
+ export type Question = z.infer<typeof questionSchema>;
80
+ export type SystemOneRequest = z.infer<typeof systemOneRequestSchema>;
81
+ export declare const noulAnswerSchema: z.ZodObject<{
82
+ type: z.ZodLiteral<"noul">;
83
+ noul: z.ZodNumber;
84
+ }, z.core.$strip>;
85
+ export declare const choiceAnswerSchema: z.ZodObject<{
86
+ type: z.ZodLiteral<"choice">;
87
+ choice: z.ZodString;
88
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
89
+ confidence: z.ZodNumber;
90
+ }, z.core.$strip>;
91
+ export declare const scoreAnswerSchema: z.ZodObject<{
92
+ type: z.ZodLiteral<"score">;
93
+ score: z.ZodNumber;
94
+ legend: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
95
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
96
+ confidence: z.ZodNumber;
97
+ }, z.core.$strip>;
98
+ export declare const answerSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
99
+ type: z.ZodLiteral<"noul">;
100
+ noul: z.ZodNumber;
101
+ }, z.core.$strip>, z.ZodObject<{
102
+ type: z.ZodLiteral<"choice">;
103
+ choice: z.ZodString;
104
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
105
+ confidence: z.ZodNumber;
106
+ }, z.core.$strip>, z.ZodObject<{
107
+ type: z.ZodLiteral<"score">;
108
+ score: z.ZodNumber;
109
+ legend: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
110
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
111
+ confidence: z.ZodNumber;
112
+ }, z.core.$strip>], "type">;
113
+ export declare const systemOneResponseSchema: z.ZodObject<{
114
+ model: z.ZodString;
115
+ answers: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
116
+ type: z.ZodLiteral<"noul">;
117
+ noul: z.ZodNumber;
118
+ }, z.core.$strip>, z.ZodObject<{
119
+ type: z.ZodLiteral<"choice">;
120
+ choice: z.ZodString;
121
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
122
+ confidence: z.ZodNumber;
123
+ }, z.core.$strip>, z.ZodObject<{
124
+ type: z.ZodLiteral<"score">;
125
+ score: z.ZodNumber;
126
+ legend: z.ZodRecord<z.ZodString, z.ZodType<EntryType, unknown, z.core.$ZodTypeInternals<EntryType, unknown>>>;
127
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
128
+ confidence: z.ZodNumber;
129
+ }, z.core.$strip>], "type">>;
130
+ usage: z.ZodObject<{
131
+ input_tokens: z.ZodNumber;
132
+ output_tokens: z.ZodNumber;
133
+ }, z.core.$strip>;
134
+ }, z.core.$strip>;
135
+ export type NoulAnswer = z.infer<typeof noulAnswerSchema>;
136
+ export type ChoiceAnswer = z.infer<typeof choiceAnswerSchema>;
137
+ export type ScoreAnswer = z.infer<typeof scoreAnswerSchema>;
138
+ export type Answer = z.infer<typeof answerSchema>;
139
+ export type SystemOneResponse = z.infer<typeof systemOneResponseSchema>;
140
+ export interface GatewayError {
141
+ error: {
142
+ type: string;
143
+ message: string;
144
+ details?: JsonValue;
145
+ };
146
+ }
147
+ export declare function errorBody(type: string, message: string, details?: JsonValue): GatewayError;
148
+ export declare function serializedBytes(value: JsonValue): number;
@@ -0,0 +1,22 @@
1
+ import type { LocalBackendConfig } from "./config.ts";
2
+ export type BackendQualificationStatus = "pass" | "warn" | "fail";
3
+ export interface BackendQualificationCheck {
4
+ id: "models" | "limits" | "systemone";
5
+ status: BackendQualificationStatus;
6
+ summary: string;
7
+ detail?: string;
8
+ }
9
+ export interface BackendQualificationReport {
10
+ version: 1;
11
+ backend: string;
12
+ base_url: string;
13
+ model: string;
14
+ ok: boolean;
15
+ checks: BackendQualificationCheck[];
16
+ }
17
+ export interface BackendQualificationOptions {
18
+ probeTimeoutMs: number;
19
+ requestTimeoutMs: number;
20
+ fetchFn?: typeof fetch;
21
+ }
22
+ export declare function qualifyBackend(backend: LocalBackendConfig, options: BackendQualificationOptions): Promise<BackendQualificationReport>;
@@ -0,0 +1,10 @@
1
+ import { type SystemOneRequest, type SystemOneResponse } from "./protocol.ts";
2
+ /**
3
+ * Validate the wire shape and its relationship to the original questions.
4
+ * Three decimal places remain the default. A protocol adapter may explicitly
5
+ * select two decimal places for a backend that publishes that precision.
6
+ * Require a normalized distribution inside the half-unit rounding intervals,
7
+ * and a compatible expected score within its own half-unit interval.
8
+ * This is arithmetic consistency, not an assessment of calibration or accuracy.
9
+ */
10
+ export declare function validateResponseForRequest(request: SystemOneRequest, value: unknown, roundingDecimals?: 2 | 3): SystemOneResponse;
@@ -0,0 +1,62 @@
1
+ import type { RoutingPolicy } from "./config.ts";
2
+ import type { SystemOneRequest } from "./protocol.ts";
3
+ /** Local means builtin inference or a loopback URL; other URLs are hosted. */
4
+ export type BackendKind = "hosted" | "local";
5
+ /** Published per-backend request limits; absent fields mean unbounded. */
6
+ export interface BackendCapabilities {
7
+ /** Largest criteria count a single choice/score question may carry. */
8
+ maxOptions?: number;
9
+ /** Largest question count a single request may carry. */
10
+ maxQuestions?: number;
11
+ }
12
+ export interface BackendCandidate {
13
+ /** Unique backend name. The built-in hosted Jev backend is "typesafe". */
14
+ name: string;
15
+ kind: BackendKind;
16
+ /** Whether the backend answered a bounded probe just now. */
17
+ available: boolean;
18
+ /** Model ids this backend reported or is configured to serve. */
19
+ models: string[];
20
+ /** Parameter count in billions; null when unknown (always null for hosted). */
21
+ size_b: number | null;
22
+ /** Operator-set cost ordering; lower is cheaper. */
23
+ cost_rank: number;
24
+ /**
25
+ * Explicit-only backends only serve requests that explicitly name them —
26
+ * they never receive unpinned policy-order fallback traffic.
27
+ */
28
+ explicitOnly?: boolean;
29
+ /** Probed or configured request limits. */
30
+ capabilities?: BackendCapabilities;
31
+ }
32
+ /** What one request demands of a backend, computed from its questions. */
33
+ export interface RequestNeeds {
34
+ /** Largest criteria count across choice/score questions (noul counts 2). */
35
+ maxOptions: number;
36
+ /** Question count in the request. */
37
+ questions: number;
38
+ }
39
+ export declare function requestNeeds(request: SystemOneRequest): RequestNeeds;
40
+ export type RouteChoice<T extends BackendCandidate = BackendCandidate> = {
41
+ ok: true;
42
+ backend: T;
43
+ reason: string;
44
+ } | {
45
+ ok: false;
46
+ reason: "unknown_model" | "model_unavailable" | "request_unsupported" | "policy_restricted" | "no_backend_available";
47
+ detail: string;
48
+ };
49
+ /**
50
+ * Pick a backend for one System One request.
51
+ *
52
+ * A request naming `backend/model` pins an exact backend. A bare model name
53
+ * matches any backend listing it, in policy order. No model means policy
54
+ * order among automatic candidates: runtime configuration admits hosted Jev
55
+ * and the selected local model. `auto` prefers Jev; `prefer-local` reverses
56
+ * that order. Other installed models and HTTP backends need an explicit pin.
57
+ *
58
+ * `needs` makes selection capability-aware: a backend whose published limits
59
+ * the request exceeds is never chosen. Explicit-only candidates are skipped
60
+ * unless the request names their model or backend/model.
61
+ */
62
+ export declare function chooseBackend<T extends BackendCandidate>(policy: RoutingPolicy, requestedModel: string | undefined, candidates: T[], needs?: RequestNeeds): RouteChoice<T>;
@@ -0,0 +1,22 @@
1
+ import { type Sys1Client } from "./client.ts";
2
+ import { type Sys1Config } from "./config.ts";
3
+ import { LocalRunner } from "./local/runner.ts";
4
+ export interface RouterOptions {
5
+ config: Sys1Config;
6
+ /** Explicit credential environment. Pass {} for credential-free routing. */
7
+ env: NodeJS.ProcessEnv;
8
+ /** Explicit model store. Omit to use only registered HTTP or hosted backends. */
9
+ home?: string;
10
+ /** Caller-owned runner: disposal remains the caller's responsibility. */
11
+ localRunner?: LocalRunner;
12
+ /** Optional transport used only for configured remote backends and probes. */
13
+ fetchFn?: typeof fetch;
14
+ }
15
+ export interface EmbeddedRouter extends Sys1Client {
16
+ /** In-process Fetch handler. Does not listen on any TCP port. */
17
+ fetch(request: Request): Promise<Response>;
18
+ /** Cancel this router's work and dispose its owned local runner. Idempotent. */
19
+ dispose(): Promise<void>;
20
+ }
21
+ /** Embedded Bun router with explicit configuration and no daemon lifecycle. */
22
+ export declare function createRouter(options: RouterOptions): EmbeddedRouter;
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "@hraness/sys1",
3
+ "version": "0.17.0",
4
+ "description": "Sys1 helps coding agents review changes against your repository's rules, with probability-scored answers from hosted Jev, a local model, or your own server.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "packageManager": "bun@1.3.14",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/hraness/sys1.git"
11
+ },
12
+ "homepage": "https://sys1.io",
13
+ "bugs": {
14
+ "url": "https://github.com/hraness/sys1/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public",
18
+ "provenance": true,
19
+ "registry": "https://registry.npmjs.org"
20
+ },
21
+ "engines": {
22
+ "bun": ">=1.3.14"
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js",
28
+ "default": "./dist/index.js"
29
+ },
30
+ "./client": {
31
+ "types": "./dist/client.d.ts",
32
+ "import": "./dist/client.js",
33
+ "default": "./dist/client.js"
34
+ }
35
+ },
36
+ "bin": {
37
+ "sys1": "dist/cli.js"
38
+ },
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "scripts": {
43
+ "build:dist": "bun scripts/build-dist.ts",
44
+ "check:package": "bun scripts/package-smoke.ts",
45
+ "check:native": "bun scripts/check-native.ts",
46
+ "test": "bun test ./src ./test",
47
+ "typecheck": "tsc --noEmit -p tsconfig.json",
48
+ "check": "bun run typecheck && bun run check:release-info && bun run brand:check && bun run test && bun run build:dist && bun run check:package",
49
+ "prepack": "bun run check",
50
+ "brand:generate": "bun scripts/generate-brand-icons.ts",
51
+ "brand:check": "bun scripts/generate-brand-icons.ts --check",
52
+ "release:sync": "bun scripts/sync-public-release.ts --write",
53
+ "check:release-info": "bun scripts/sync-public-release.ts --check"
54
+ },
55
+ "dependencies": {
56
+ "zod": "4.6.2"
57
+ },
58
+ "optionalDependencies": {
59
+ "node-llama-cpp": "3.20.0"
60
+ },
61
+ "devDependencies": {
62
+ "@types/bun": "1.3.14",
63
+ "@types/node": "26.2.0",
64
+ "playwright-core": "1.58.2",
65
+ "sharp": "0.35.3",
66
+ "typescript": "6.0.3"
67
+ },
68
+ "trustedDependencies": [
69
+ "node-llama-cpp"
70
+ ],
71
+ "keywords": [
72
+ "coding-agents",
73
+ "agent-skills",
74
+ "code-review",
75
+ "jev",
76
+ "system-one",
77
+ "typescript",
78
+ "codex",
79
+ "claude-code",
80
+ "devin"
81
+ ]
82
+ }