@dungle-scrubs/harness-cli-normalizer 0.1.1
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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/execution/channel.d.ts +33 -0
- package/dist/execution/channel.d.ts.map +1 -0
- package/dist/execution/channel.js +86 -0
- package/dist/execution/channel.js.map +1 -0
- package/dist/execution/decode.d.ts +16 -0
- package/dist/execution/decode.d.ts.map +1 -0
- package/dist/execution/decode.js +60 -0
- package/dist/execution/decode.js.map +1 -0
- package/dist/execution/deps.d.ts +53 -0
- package/dist/execution/deps.d.ts.map +1 -0
- package/dist/execution/deps.js +8 -0
- package/dist/execution/deps.js.map +1 -0
- package/dist/execution/events.d.ts +54 -0
- package/dist/execution/events.d.ts.map +1 -0
- package/dist/execution/events.js +2 -0
- package/dist/execution/events.js.map +1 -0
- package/dist/execution/index.d.ts +19 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +19 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/lines.d.ts +21 -0
- package/dist/execution/lines.d.ts.map +1 -0
- package/dist/execution/lines.js +70 -0
- package/dist/execution/lines.js.map +1 -0
- package/dist/execution/node-deps.d.ts +13 -0
- package/dist/execution/node-deps.d.ts.map +1 -0
- package/dist/execution/node-deps.js +164 -0
- package/dist/execution/node-deps.js.map +1 -0
- package/dist/execution/open-session.d.ts +31 -0
- package/dist/execution/open-session.d.ts.map +1 -0
- package/dist/execution/open-session.js +360 -0
- package/dist/execution/open-session.js.map +1 -0
- package/dist/execution/stream-turn.d.ts +43 -0
- package/dist/execution/stream-turn.d.ts.map +1 -0
- package/dist/execution/stream-turn.js +283 -0
- package/dist/execution/stream-turn.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/interpretation/argv.d.ts +35 -0
- package/dist/interpretation/argv.d.ts.map +1 -0
- package/dist/interpretation/argv.js +147 -0
- package/dist/interpretation/argv.js.map +1 -0
- package/dist/interpretation/capabilities.d.ts +19 -0
- package/dist/interpretation/capabilities.d.ts.map +1 -0
- package/dist/interpretation/capabilities.js +25 -0
- package/dist/interpretation/capabilities.js.map +1 -0
- package/dist/interpretation/content.d.ts +33 -0
- package/dist/interpretation/content.d.ts.map +1 -0
- package/dist/interpretation/content.js +169 -0
- package/dist/interpretation/content.js.map +1 -0
- package/dist/interpretation/context.d.ts +17 -0
- package/dist/interpretation/context.d.ts.map +1 -0
- package/dist/interpretation/context.js +16 -0
- package/dist/interpretation/context.js.map +1 -0
- package/dist/interpretation/dimensions.d.ts +13 -0
- package/dist/interpretation/dimensions.d.ts.map +1 -0
- package/dist/interpretation/dimensions.js +6 -0
- package/dist/interpretation/dimensions.js.map +1 -0
- package/dist/interpretation/identity.d.ts +32 -0
- package/dist/interpretation/identity.d.ts.map +1 -0
- package/dist/interpretation/identity.js +44 -0
- package/dist/interpretation/identity.js.map +1 -0
- package/dist/interpretation/index.d.ts +23 -0
- package/dist/interpretation/index.d.ts.map +1 -0
- package/dist/interpretation/index.js +23 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/limits.d.ts +20 -0
- package/dist/interpretation/limits.d.ts.map +1 -0
- package/dist/interpretation/limits.js +35 -0
- package/dist/interpretation/limits.js.map +1 -0
- package/dist/interpretation/parse-resume.d.ts +28 -0
- package/dist/interpretation/parse-resume.d.ts.map +1 -0
- package/dist/interpretation/parse-resume.js +91 -0
- package/dist/interpretation/parse-resume.js.map +1 -0
- package/dist/interpretation/presence.d.ts +16 -0
- package/dist/interpretation/presence.d.ts.map +1 -0
- package/dist/interpretation/presence.js +32 -0
- package/dist/interpretation/presence.js.map +1 -0
- package/dist/interpretation/resume-last.d.ts +32 -0
- package/dist/interpretation/resume-last.d.ts.map +1 -0
- package/dist/interpretation/resume-last.js +70 -0
- package/dist/interpretation/resume-last.js.map +1 -0
- package/dist/interpretation/session-id.d.ts +22 -0
- package/dist/interpretation/session-id.d.ts.map +1 -0
- package/dist/interpretation/session-id.js +29 -0
- package/dist/interpretation/session-id.js.map +1 -0
- package/dist/interpretation/session-input.d.ts +13 -0
- package/dist/interpretation/session-input.d.ts.map +1 -0
- package/dist/interpretation/session-input.js +32 -0
- package/dist/interpretation/session-input.js.map +1 -0
- package/dist/interpretation/shape.d.ts +17 -0
- package/dist/interpretation/shape.d.ts.map +1 -0
- package/dist/interpretation/shape.js +54 -0
- package/dist/interpretation/shape.js.map +1 -0
- package/dist/interpretation/store.d.ts +16 -0
- package/dist/interpretation/store.d.ts.map +1 -0
- package/dist/interpretation/store.js +27 -0
- package/dist/interpretation/store.js.map +1 -0
- package/dist/interpretation/versions.d.ts +16 -0
- package/dist/interpretation/versions.d.ts.map +1 -0
- package/dist/interpretation/versions.js +44 -0
- package/dist/interpretation/versions.js.map +1 -0
- package/dist/interpretation/vocabulary.d.ts +29 -0
- package/dist/interpretation/vocabulary.d.ts.map +1 -0
- package/dist/interpretation/vocabulary.js +55 -0
- package/dist/interpretation/vocabulary.js.map +1 -0
- package/dist/knowledge/claude-code.d.ts +8 -0
- package/dist/knowledge/claude-code.d.ts.map +1 -0
- package/dist/knowledge/claude-code.js +132 -0
- package/dist/knowledge/claude-code.js.map +1 -0
- package/dist/knowledge/codex.d.ts +9 -0
- package/dist/knowledge/codex.d.ts.map +1 -0
- package/dist/knowledge/codex.js +106 -0
- package/dist/knowledge/codex.js.map +1 -0
- package/dist/knowledge/descriptor.d.ts +211 -0
- package/dist/knowledge/descriptor.d.ts.map +1 -0
- package/dist/knowledge/descriptor.js +20 -0
- package/dist/knowledge/descriptor.js.map +1 -0
- package/dist/knowledge/index.d.ts +19 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +19 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/matchers.d.ts +10 -0
- package/dist/knowledge/matchers.d.ts.map +1 -0
- package/dist/knowledge/matchers.js +11 -0
- package/dist/knowledge/matchers.js.map +1 -0
- package/dist/knowledge/muse.d.ts +12 -0
- package/dist/knowledge/muse.d.ts.map +1 -0
- package/dist/knowledge/muse.js +94 -0
- package/dist/knowledge/muse.js.map +1 -0
- package/dist/knowledge/overrides.d.ts +11 -0
- package/dist/knowledge/overrides.d.ts.map +1 -0
- package/dist/knowledge/overrides.js +166 -0
- package/dist/knowledge/overrides.js.map +1 -0
- package/dist/knowledge/pi.d.ts +11 -0
- package/dist/knowledge/pi.d.ts.map +1 -0
- package/dist/knowledge/pi.js +97 -0
- package/dist/knowledge/pi.js.map +1 -0
- package/package.json +69 -0
- package/src/execution/channel.ts +86 -0
- package/src/execution/decode.ts +79 -0
- package/src/execution/deps.ts +59 -0
- package/src/execution/events.ts +37 -0
- package/src/execution/index.ts +18 -0
- package/src/execution/lines.ts +71 -0
- package/src/execution/node-deps.ts +179 -0
- package/src/execution/open-session.ts +392 -0
- package/src/execution/stream-turn.ts +310 -0
- package/src/index.ts +7 -0
- package/src/interpretation/argv.ts +188 -0
- package/src/interpretation/capabilities.ts +51 -0
- package/src/interpretation/content.ts +191 -0
- package/src/interpretation/context.ts +28 -0
- package/src/interpretation/dimensions.ts +20 -0
- package/src/interpretation/identity.ts +81 -0
- package/src/interpretation/index.ts +22 -0
- package/src/interpretation/limits.ts +63 -0
- package/src/interpretation/parse-resume.ts +117 -0
- package/src/interpretation/presence.ts +49 -0
- package/src/interpretation/resume-last.ts +93 -0
- package/src/interpretation/session-id.ts +35 -0
- package/src/interpretation/session-input.ts +45 -0
- package/src/interpretation/shape.ts +55 -0
- package/src/interpretation/store.ts +43 -0
- package/src/interpretation/versions.ts +43 -0
- package/src/interpretation/vocabulary.ts +74 -0
- package/src/knowledge/claude-code.ts +132 -0
- package/src/knowledge/codex.ts +106 -0
- package/src/knowledge/descriptor.ts +217 -0
- package/src/knowledge/index.ts +23 -0
- package/src/knowledge/matchers.ts +19 -0
- package/src/knowledge/muse.ts +94 -0
- package/src/knowledge/overrides.ts +182 -0
- package/src/knowledge/pi.ts +97 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The claude-code descriptor: facts about the `claude` CLI as data, verified
|
|
3
|
+
* against claude 2.1.227 and the 00-chat-substrate spike evidence (A-001,
|
|
4
|
+
* A-002, A-005). No process logic lives here.
|
|
5
|
+
*/
|
|
6
|
+
import { deepFreeze, UUID_SHAPE } from "./descriptor.js";
|
|
7
|
+
import { SHARED_AUTH_MATCHERS, SHARED_LIMIT_MATCHERS } from "./matchers.js";
|
|
8
|
+
export const claudeCode = deepFreeze({
|
|
9
|
+
name: "claude",
|
|
10
|
+
bin: "claude",
|
|
11
|
+
verifiedAgainst: "2.1.227",
|
|
12
|
+
versionSource: { kind: "npm", package: "@anthropic-ai/claude-code" },
|
|
13
|
+
launch: {
|
|
14
|
+
baseFlags: ["-p"],
|
|
15
|
+
subcommands: [],
|
|
16
|
+
promptStyle: "positional",
|
|
17
|
+
toolsFlag: "--allowedTools",
|
|
18
|
+
// A headless turn launches with the full stream-json output set so the
|
|
19
|
+
// runner can decode identity/limits and stream token deltas; bare -p
|
|
20
|
+
// (granularity none) is a degraded invocation this builder never emits.
|
|
21
|
+
streamFlags: ["--output-format", "stream-json", "--verbose", "--include-partial-messages"],
|
|
22
|
+
idFlag: "--session-id",
|
|
23
|
+
},
|
|
24
|
+
resume: {
|
|
25
|
+
// A-005: claude resumes are id-stable - the caller-assigned id survives
|
|
26
|
+
// every resume, so there is no rotation handling and forking is only the
|
|
27
|
+
// explicit --fork-session flag (deliberate branching, never a default).
|
|
28
|
+
style: "flag",
|
|
29
|
+
flag: "--resume",
|
|
30
|
+
aliases: ["-r"],
|
|
31
|
+
idShape: UUID_SHAPE,
|
|
32
|
+
onMissing: "error",
|
|
33
|
+
extraFlags: ["-p"],
|
|
34
|
+
},
|
|
35
|
+
sessionMode: {
|
|
36
|
+
// A-001: one process, many turns; `result` delimits turns; mid-turn sends
|
|
37
|
+
// queue. --setting-sources project isolates the child from user-level
|
|
38
|
+
// hooks (D-025). Token deltas require this exact output flag set.
|
|
39
|
+
flags: [
|
|
40
|
+
"--input-format",
|
|
41
|
+
"stream-json",
|
|
42
|
+
"--output-format",
|
|
43
|
+
"stream-json",
|
|
44
|
+
"--include-partial-messages",
|
|
45
|
+
"--verbose",
|
|
46
|
+
"--setting-sources",
|
|
47
|
+
"project",
|
|
48
|
+
],
|
|
49
|
+
idFlag: "--session-id",
|
|
50
|
+
input: { kind: "claude-sdk-user-message" },
|
|
51
|
+
},
|
|
52
|
+
output: {
|
|
53
|
+
// --output-format/--include-partial-messages only work with --print, so
|
|
54
|
+
// -p is part of the pin, not an accident of the builders.
|
|
55
|
+
pins: [
|
|
56
|
+
{
|
|
57
|
+
flags: ["-p", "--output-format", "stream-json", "--verbose", "--include-partial-messages"],
|
|
58
|
+
granularity: "token",
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
floor: "none",
|
|
62
|
+
flagAliases: { "--print": "-p" },
|
|
63
|
+
},
|
|
64
|
+
identity: {
|
|
65
|
+
authority: "caller-assigned",
|
|
66
|
+
announce: { match: { type: "system", subtype: "init" }, idField: "session_id" },
|
|
67
|
+
},
|
|
68
|
+
limitMatchers: [
|
|
69
|
+
// Observed phrasings from the live CLI (ported from lucid v1's limits.ts):
|
|
70
|
+
// "You've hit your session limit · resets 6:30pm"
|
|
71
|
+
[/you'?ve hit your session limit/i, "session-limit"],
|
|
72
|
+
// "You've hit your weekly limit · resets 2am (Asia/Bangkok)"
|
|
73
|
+
[/you'?ve hit your weekly limit/i, "weekly-limit"],
|
|
74
|
+
...SHARED_LIMIT_MATCHERS,
|
|
75
|
+
],
|
|
76
|
+
authMatchers: [
|
|
77
|
+
// A detached process cannot read Keychain creds, and misreading that as
|
|
78
|
+
// "not logged in" sends the human to redo a login that was never broken.
|
|
79
|
+
[/oauth session expired|could not be refreshed/i, "expired"],
|
|
80
|
+
[/failed to authenticate/i, "expired"],
|
|
81
|
+
[/not logged in|please run \/login/i, "not-logged-in"],
|
|
82
|
+
...SHARED_AUTH_MATCHERS,
|
|
83
|
+
],
|
|
84
|
+
autonomy: { flag: "--dangerously-skip-permissions" },
|
|
85
|
+
vocabulary: {
|
|
86
|
+
modelFlag: "--model",
|
|
87
|
+
models: ["claude-fable-5", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5-20251001"],
|
|
88
|
+
aliases: {
|
|
89
|
+
fable: "claude-fable-5",
|
|
90
|
+
opus: "claude-opus-5",
|
|
91
|
+
sonnet: "claude-sonnet-5",
|
|
92
|
+
haiku: "claude-haiku-4-5-20251001",
|
|
93
|
+
},
|
|
94
|
+
efforts: ["low", "medium", "high", "xhigh", "max"],
|
|
95
|
+
// Effort is an in-session command for claude, not a launch flag.
|
|
96
|
+
effortFlag: null,
|
|
97
|
+
extensible: false,
|
|
98
|
+
},
|
|
99
|
+
store: {
|
|
100
|
+
// Verified against the A-001 fixture's memory_paths slug and real
|
|
101
|
+
// ~/.claude/projects entries: '/', '.' -> '-'; '_' preserved.
|
|
102
|
+
template: "{home}/.claude/projects/{cwdSlug}/{sessionId}.jsonl",
|
|
103
|
+
cwdSlug: "dash-separators",
|
|
104
|
+
},
|
|
105
|
+
contextHook: {
|
|
106
|
+
// claude statusline payload: { context_window: { used_percentage } }.
|
|
107
|
+
// This arrives on the statusline channel, never on stream-json stdout -
|
|
108
|
+
// route accordingly, do not call per stdout line.
|
|
109
|
+
object: "context_window",
|
|
110
|
+
usedPctField: "used_percentage",
|
|
111
|
+
},
|
|
112
|
+
resumeLast: null,
|
|
113
|
+
provider: null,
|
|
114
|
+
stdin: "inherit",
|
|
115
|
+
// D-025: project-only setting sources is claude's discovery-isolation
|
|
116
|
+
// spelling; the child loads no user-level hooks or skills.
|
|
117
|
+
discoveryDisableFlags: ["--setting-sources", "project"],
|
|
118
|
+
presence: {
|
|
119
|
+
headlessMarkers: ["-p", "--print"],
|
|
120
|
+
},
|
|
121
|
+
capabilities: {
|
|
122
|
+
vision: true,
|
|
123
|
+
images: true,
|
|
124
|
+
streamingByMode: {
|
|
125
|
+
"headless-turn": "token",
|
|
126
|
+
"headless-session": "token",
|
|
127
|
+
interactive: "message",
|
|
128
|
+
},
|
|
129
|
+
session: true,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/knowledge/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The codex descriptor: facts about the `codex` CLI as data, verified
|
|
3
|
+
* against codex-cli 0.147.0 and lucid v1's registry. Descriptor groundwork
|
|
4
|
+
* only (D-003): not exercised through the chat protocol until the claude
|
|
5
|
+
* vertical slice is green.
|
|
6
|
+
*/
|
|
7
|
+
import { type HarnessDescriptor } from "./descriptor.js";
|
|
8
|
+
export declare const codexCli: HarnessDescriptor;
|
|
9
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/knowledge/codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAc,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAGjF,eAAO,MAAM,QAAQ,EAAE,iBAgGrB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The codex descriptor: facts about the `codex` CLI as data, verified
|
|
3
|
+
* against codex-cli 0.147.0 and lucid v1's registry. Descriptor groundwork
|
|
4
|
+
* only (D-003): not exercised through the chat protocol until the claude
|
|
5
|
+
* vertical slice is green.
|
|
6
|
+
*/
|
|
7
|
+
import { deepFreeze, UUID_SHAPE } from "./descriptor.js";
|
|
8
|
+
import { SHARED_AUTH_MATCHERS, SHARED_LIMIT_MATCHERS } from "./matchers.js";
|
|
9
|
+
export const codexCli = deepFreeze({
|
|
10
|
+
name: "codex",
|
|
11
|
+
bin: "codex",
|
|
12
|
+
verifiedAgainst: "0.147.0",
|
|
13
|
+
versionSource: { kind: "npm", package: "@openai/codex" },
|
|
14
|
+
launch: {
|
|
15
|
+
// exec --json emits structured item events; without --json, identity
|
|
16
|
+
// discovery is blind (v1: requiredArgument "--json"). The sandbox grant
|
|
17
|
+
// is v1's proven spawn shape - codex's built-in default is read-only,
|
|
18
|
+
// under which a non-autonomy turn cannot write files.
|
|
19
|
+
// --skip-git-repo-check: codex exec refuses to run outside a trusted
|
|
20
|
+
// git dir without it (verified 0.147.0). cwd targeting is the spawner's
|
|
21
|
+
// job (spawn opts.cwd), not descriptor data.
|
|
22
|
+
baseFlags: ["exec", "--json", "--sandbox", "workspace-write", "--skip-git-repo-check"],
|
|
23
|
+
subcommands: ["exec"],
|
|
24
|
+
promptStyle: "positional",
|
|
25
|
+
toolsFlag: null,
|
|
26
|
+
streamFlags: [],
|
|
27
|
+
// Codex mints its own thread id; there is nothing to assign at launch.
|
|
28
|
+
idFlag: null,
|
|
29
|
+
},
|
|
30
|
+
resume: {
|
|
31
|
+
// `codex exec resume <id> [--json] <prompt>` - the resume word is a
|
|
32
|
+
// subcommand of exec (verified: `codex exec resume --help`).
|
|
33
|
+
style: "positional",
|
|
34
|
+
flag: "resume",
|
|
35
|
+
aliases: [],
|
|
36
|
+
idShape: UUID_SHAPE,
|
|
37
|
+
onMissing: "error",
|
|
38
|
+
// `codex exec resume` accepts --json and --skip-git-repo-check but
|
|
39
|
+
// REJECTS --sandbox (verified 0.147.0: "unexpected argument").
|
|
40
|
+
extraFlags: ["--json", "--skip-git-repo-check"],
|
|
41
|
+
},
|
|
42
|
+
sessionMode: null,
|
|
43
|
+
output: {
|
|
44
|
+
// exec --json emits item-level events (message granularity); a bare
|
|
45
|
+
// exec emits nothing structured at all.
|
|
46
|
+
pins: [{ flags: ["--json"], granularity: "message" }],
|
|
47
|
+
floor: "none",
|
|
48
|
+
flagAliases: {},
|
|
49
|
+
},
|
|
50
|
+
identity: {
|
|
51
|
+
// Codex mints its own thread id and announces it on stdout-jsonl.
|
|
52
|
+
authority: "harness-minted",
|
|
53
|
+
announce: { match: { type: "thread.started" }, idField: "thread_id" },
|
|
54
|
+
},
|
|
55
|
+
limitMatchers: [...SHARED_LIMIT_MATCHERS],
|
|
56
|
+
authMatchers: [[/run codex login/i, "not-logged-in"], ...SHARED_AUTH_MATCHERS],
|
|
57
|
+
// Accepted by codex 0.147.0 as a hidden alias (not in --help).
|
|
58
|
+
autonomy: { flag: "--yolo" },
|
|
59
|
+
vocabulary: {
|
|
60
|
+
modelFlag: "--model",
|
|
61
|
+
models: ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.5"],
|
|
62
|
+
aliases: {},
|
|
63
|
+
efforts: ["minimal", "low", "medium", "high", "xhigh", "max", "ultra"],
|
|
64
|
+
// Codex constrains ladders per model generation (v1 registry).
|
|
65
|
+
effortsByModel: {
|
|
66
|
+
"gpt-5.5": ["minimal", "low", "medium", "high"],
|
|
67
|
+
"gpt-5.6-sol": ["medium", "high", "xhigh", "max", "ultra"],
|
|
68
|
+
"gpt-5.6-terra": ["medium", "high", "xhigh", "max", "ultra"],
|
|
69
|
+
"gpt-5.6-luna": ["medium", "high", "xhigh", "max", "ultra"],
|
|
70
|
+
},
|
|
71
|
+
// Reasoning effort is a config key (-c model_reasoning_effort=...), not
|
|
72
|
+
// a plain flag; argv-level insertion has no spelling to use.
|
|
73
|
+
effortFlag: null,
|
|
74
|
+
extensible: false,
|
|
75
|
+
},
|
|
76
|
+
store: {
|
|
77
|
+
// ~/.codex/sessions/YYYY/MM/DD/rollout-<stamp>-<threadId>.jsonl - the
|
|
78
|
+
// date/stamp components need a store scan, so the template names the
|
|
79
|
+
// sessions root; the execution layer resolves the rollout file.
|
|
80
|
+
template: "{home}/.codex/sessions",
|
|
81
|
+
cwdSlug: "verbatim",
|
|
82
|
+
},
|
|
83
|
+
contextHook: null,
|
|
84
|
+
// Valid only in the `exec resume` context: `codex exec resume --last`.
|
|
85
|
+
resumeLast: { flag: "--last" },
|
|
86
|
+
provider: null,
|
|
87
|
+
// codex exec appends piped stdin as a <stdin> block and can block on an
|
|
88
|
+
// open stdin - close it (verified 0.147.0: "Reading additional input
|
|
89
|
+
// from stdin...").
|
|
90
|
+
stdin: "close-required",
|
|
91
|
+
discoveryDisableFlags: [],
|
|
92
|
+
presence: {
|
|
93
|
+
headlessMarkers: ["exec"],
|
|
94
|
+
},
|
|
95
|
+
capabilities: {
|
|
96
|
+
vision: true,
|
|
97
|
+
images: true,
|
|
98
|
+
streamingByMode: {
|
|
99
|
+
"headless-turn": "message",
|
|
100
|
+
"headless-session": "none",
|
|
101
|
+
interactive: "none",
|
|
102
|
+
},
|
|
103
|
+
session: false,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/knowledge/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Descriptor types: the shape of what is KNOWN about a harness CLI, as pure
|
|
3
|
+
* data. Interpretation functions consume these; nothing here executes.
|
|
4
|
+
*/
|
|
5
|
+
export declare const HARNESS_NAMES: readonly ["claude", "codex", "pi", "muse"];
|
|
6
|
+
export type HarnessName = (typeof HARNESS_NAMES)[number];
|
|
7
|
+
/** Descriptors are process-wide defaults shared by reference into merged
|
|
8
|
+
* override sets - freezing makes an accidental in-place edit throw instead
|
|
9
|
+
* of corrupting every consumer. */
|
|
10
|
+
/** A 36-char UUID - how every supported harness names its sessions. */
|
|
11
|
+
export declare const UUID_SHAPE: RegExp;
|
|
12
|
+
export declare const deepFreeze: <T>(value: T) => T;
|
|
13
|
+
export type StreamingGranularity = "token" | "message" | "none";
|
|
14
|
+
export type HarnessMode = "headless-turn" | "headless-session" | "interactive";
|
|
15
|
+
export declare const SESSION_INPUT_KINDS: readonly ["claude-sdk-user-message"];
|
|
16
|
+
export type SessionInputKind = (typeof SESSION_INPUT_KINDS)[number];
|
|
17
|
+
export interface SessionInputContract {
|
|
18
|
+
readonly kind: SessionInputKind;
|
|
19
|
+
}
|
|
20
|
+
/** Consumers branch on these (session-limit: wait for reset; weekly-limit:
|
|
21
|
+
* route elsewhere), so the vocabulary is closed - a descriptor cannot invent
|
|
22
|
+
* a code a consumer has no arm for. */
|
|
23
|
+
export type LimitCode = "usage-limit" | "session-limit" | "weekly-limit" | "credits" | "quota";
|
|
24
|
+
/** Auth walls are separate from usage limits because the remedy is entirely
|
|
25
|
+
* different (re-auth vs wait), and a detached process misreading one as the
|
|
26
|
+
* other sends the human to fix the wrong thing. */
|
|
27
|
+
export type AuthFailureKind = "not-logged-in" | "expired" | "invalid-key";
|
|
28
|
+
export interface HarnessDescriptor {
|
|
29
|
+
readonly name: HarnessName;
|
|
30
|
+
readonly bin: string;
|
|
31
|
+
/** The CLI version every fact in this descriptor - argv shapes, event
|
|
32
|
+
* vocabularies, capability claims, resume semantics - was verified
|
|
33
|
+
* against, as `<bin> --version` reports it. This is the anchor for the
|
|
34
|
+
* harness-update pipeline: CI compares the published/installed version to
|
|
35
|
+
* this, and a mismatch means the descriptor's facts are unverified for the
|
|
36
|
+
* new version (drift possible, or a capability the descriptor says is
|
|
37
|
+
* absent may now exist). Bump it only when the facts have been re-verified
|
|
38
|
+
* against that version (and the fixtures re-captured). */
|
|
39
|
+
readonly verifiedAgainst: string;
|
|
40
|
+
/** Where the latest published version is found, so the update pipeline can
|
|
41
|
+
* detect a new release WITHOUT installing the CLI or running inference.
|
|
42
|
+
* `npm` is a pure registry query (credential-free, CI-friendly);
|
|
43
|
+
* `installed` harnesses (muse ships a shell script, not an npm package)
|
|
44
|
+
* have no registry to poll, so the check falls back to the locally
|
|
45
|
+
* installed `<bin> --version` and is skipped where the CLI is absent. */
|
|
46
|
+
readonly versionSource: {
|
|
47
|
+
readonly kind: "npm";
|
|
48
|
+
readonly package: string;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: "installed";
|
|
51
|
+
};
|
|
52
|
+
/** Headless one-turn launch shape. `promptStyle: "positional"` means the
|
|
53
|
+
* prompt travels as a bare argv entry (ordering constraints apply).
|
|
54
|
+
* `streamFlags` is the output flag set a headless turn launches with so
|
|
55
|
+
* its stream is parseable and token-granular where the harness supports
|
|
56
|
+
* it - the v1 stall-watchdog scar was launching bare and then waiting for
|
|
57
|
+
* deltas the invocation could not emit. */
|
|
58
|
+
readonly launch: {
|
|
59
|
+
readonly baseFlags: readonly string[];
|
|
60
|
+
/** The subcommand words among baseFlags (codex/muse `exec`), declared
|
|
61
|
+
* explicitly - resume parsing anchors on them, and deriving them by
|
|
62
|
+
* filtering non-dash tokens would silently promote flag VALUES like
|
|
63
|
+
* `workspace-write` into subcommands. */
|
|
64
|
+
readonly subcommands: readonly string[];
|
|
65
|
+
readonly promptStyle: "positional";
|
|
66
|
+
readonly toolsFlag: string | null;
|
|
67
|
+
readonly streamFlags: readonly string[];
|
|
68
|
+
/** The flag that pins a caller-assigned id at LAUNCH (spawn-time
|
|
69
|
+
* assignment; the execution layer consumes it), or null when the
|
|
70
|
+
* harness mints its own. */
|
|
71
|
+
readonly idFlag: string | null;
|
|
72
|
+
};
|
|
73
|
+
/** How a named session id is resumed. `flag` style: `<bin> <flag> <id>`;
|
|
74
|
+
* `positional` style: `<bin> resume <id>` (muse) - the resume token must
|
|
75
|
+
* sit at argv position 1. `idShape` is the shape of the harness's own ids;
|
|
76
|
+
* parseResumeCommand refuses commands where an id-shaped token appears
|
|
77
|
+
* anywhere else (the v1 first-UUID-wins scar: a UUID inside quoted prompt
|
|
78
|
+
* text was returned as the session id, and resuming it started a stranger). */
|
|
79
|
+
readonly resume: {
|
|
80
|
+
readonly style: "flag" | "positional";
|
|
81
|
+
readonly flag: string;
|
|
82
|
+
readonly aliases: readonly string[];
|
|
83
|
+
readonly idShape: RegExp;
|
|
84
|
+
/** Flags valid in the RESUME grammar - resume argv never inherits
|
|
85
|
+
* launch flags, because subcommand grammars differ (codex exec resume
|
|
86
|
+
* rejects --sandbox). */
|
|
87
|
+
readonly extraFlags: readonly string[];
|
|
88
|
+
/** A parse-only positional spelling (muse's interactive `muse resume
|
|
89
|
+
* <id>`) recognized when pasted, but never built - the builder uses
|
|
90
|
+
* `style`/`flag`. */
|
|
91
|
+
readonly positionalParseWord?: string;
|
|
92
|
+
/** What resuming a NONEXISTENT id does (verified live): "error" -
|
|
93
|
+
* claude/codex refuse an unknown session; "create" - pi/muse treat the
|
|
94
|
+
* id as create-if-missing and silently start a FRESH session under it.
|
|
95
|
+
* The protocol layer must know this: a consumer resuming a session it
|
|
96
|
+
* believes exists gets a blank session, not an error, on a "create"
|
|
97
|
+
* harness. */
|
|
98
|
+
readonly onMissing: "error" | "create";
|
|
99
|
+
};
|
|
100
|
+
/** Persistent headless session support: the exact flag set that opens one
|
|
101
|
+
* lucid-owned process serving many turns, or null when the harness has no
|
|
102
|
+
* such mode. `idFlag` pins the caller-assigned session identity. */
|
|
103
|
+
readonly sessionMode: {
|
|
104
|
+
readonly flags: readonly string[];
|
|
105
|
+
readonly idFlag: string;
|
|
106
|
+
readonly input: SessionInputContract;
|
|
107
|
+
} | null;
|
|
108
|
+
/** Streaming is a property of the INVOCATION, not the harness: each pin
|
|
109
|
+
* names the flag set that unlocks a granularity, checked in order, first
|
|
110
|
+
* fully-satisfied pin wins; an argv satisfying none gets `floor`. This
|
|
111
|
+
* carries claude (token under stream-json), codex (message under --json,
|
|
112
|
+
* none bare), and muse/pi in one shape - a single conditional tier could
|
|
113
|
+
* not. `flagAliases` maps alternate spellings onto pin members. */
|
|
114
|
+
readonly output: {
|
|
115
|
+
readonly pins: ReadonlyArray<{
|
|
116
|
+
readonly flags: readonly string[];
|
|
117
|
+
readonly granularity: StreamingGranularity;
|
|
118
|
+
}>;
|
|
119
|
+
readonly floor: StreamingGranularity;
|
|
120
|
+
readonly flagAliases: Readonly<Record<string, string>>;
|
|
121
|
+
};
|
|
122
|
+
/** Where native identity appears in the stream, and who mints it. Every
|
|
123
|
+
* key/value pair in `announce.match` must match the raw event; claude:
|
|
124
|
+
* {type: "system", subtype: "init"}, re-emitted at every turn start with
|
|
125
|
+
* the same value (A-001) - consumers dedupe via decodeIdentity. */
|
|
126
|
+
readonly identity: {
|
|
127
|
+
readonly authority: "caller-assigned" | "harness-minted";
|
|
128
|
+
/** `idField` is a dot-path (muse nests its id at `stream.id`); an empty
|
|
129
|
+
* `match` means "any record carrying the id path". */
|
|
130
|
+
readonly announce: {
|
|
131
|
+
readonly match: Readonly<Record<string, string>>;
|
|
132
|
+
readonly idField: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
/** "Stopped on a limit" vs crash vs clean exit: the harness's own wall
|
|
136
|
+
* phrasings. First match wins per line. */
|
|
137
|
+
readonly limitMatchers: ReadonlyArray<readonly [RegExp, LimitCode]>;
|
|
138
|
+
/** Auth-wall phrasings, same scan discipline as limitMatchers. */
|
|
139
|
+
readonly authMatchers: ReadonlyArray<readonly [RegExp, AuthFailureKind]>;
|
|
140
|
+
/** The "run unattended without stops" flag, or null when the harness has
|
|
141
|
+
* no such mode. */
|
|
142
|
+
readonly autonomy: {
|
|
143
|
+
readonly flag: string;
|
|
144
|
+
} | null;
|
|
145
|
+
/** The harness's own model-id spellings, alias map, and effort ladder.
|
|
146
|
+
* Curated baseline - pi's registry is runtime-extensible, so validation
|
|
147
|
+
* against this vocabulary is a default, not a final word (D-008).
|
|
148
|
+
* `effortFlag` is null where effort is not a launch-time flag (claude:
|
|
149
|
+
* effort is an in-session command, not argv). */
|
|
150
|
+
readonly vocabulary: {
|
|
151
|
+
readonly modelFlag: string;
|
|
152
|
+
readonly models: readonly string[];
|
|
153
|
+
readonly aliases: Readonly<Record<string, string>>;
|
|
154
|
+
readonly efforts: readonly string[];
|
|
155
|
+
/** Per-model effort ladders where the harness constrains them (codex:
|
|
156
|
+
* gpt-5.5 tops out at high; gpt-5.6-* starts at medium). Falls back to
|
|
157
|
+
* the harness-wide `efforts`. */
|
|
158
|
+
readonly effortsByModel?: Readonly<Record<string, readonly string[]>>;
|
|
159
|
+
readonly effortFlag: string | null;
|
|
160
|
+
/** D-008: an extensible vocabulary (pi) accepts clean unknown model
|
|
161
|
+
* selectors at argv time; capability claims for them degrade to
|
|
162
|
+
* unknown until runtime verification. */
|
|
163
|
+
readonly extensible: boolean;
|
|
164
|
+
};
|
|
165
|
+
/** Where the harness files sessions/transcripts, as a template over
|
|
166
|
+
* {home}, {cwdSlug} and {sessionId}. Slugging rule is per-harness. */
|
|
167
|
+
readonly store: {
|
|
168
|
+
readonly template: string;
|
|
169
|
+
/** claude: '/', '.' -> '-'; pi: '/' -> '-' wrapped in leading/trailing
|
|
170
|
+
* dashes, dots preserved. */
|
|
171
|
+
readonly cwdSlug: "dash-separators" | "pi-dash-wrapped" | "verbatim";
|
|
172
|
+
};
|
|
173
|
+
/** How the harness exposes context-window usage; the interpretation layer
|
|
174
|
+
* surfaces it as a `context` HarnessEvent. */
|
|
175
|
+
readonly contextHook: {
|
|
176
|
+
readonly object: string;
|
|
177
|
+
readonly usedPctField: string;
|
|
178
|
+
} | null;
|
|
179
|
+
/** Resume-most-recent support (codex --last), or null. The race it opens
|
|
180
|
+
* is owned by the corroboration ranking in interpretation. */
|
|
181
|
+
readonly resumeLast: {
|
|
182
|
+
readonly flag: string;
|
|
183
|
+
} | null;
|
|
184
|
+
/** Provider/model-route flag where present (pi --provider). */
|
|
185
|
+
readonly provider: {
|
|
186
|
+
readonly flag: string;
|
|
187
|
+
} | null;
|
|
188
|
+
/** Whether backgrounded headless calls must have stdin closed (pi hangs
|
|
189
|
+
* without `< /dev/null`). */
|
|
190
|
+
readonly stdin: "inherit" | "close-required";
|
|
191
|
+
/** Flags that disable instruction-file/skill/MCP auto-discovery, in the
|
|
192
|
+
* spelling the harness accepts. */
|
|
193
|
+
readonly discoveryDisableFlags: readonly string[];
|
|
194
|
+
/** Presence recognition: how an interactive process for a session id shows
|
|
195
|
+
* up in a process listing. `headlessMarkers` mark a process as headless
|
|
196
|
+
* (not interactive presence). Known blind spot, inherent to argv matching:
|
|
197
|
+
* an interactive session carrying no id in argv (`claude --continue`) is
|
|
198
|
+
* invisible here - presence corroborates, it never proves. */
|
|
199
|
+
readonly presence: {
|
|
200
|
+
readonly headlessMarkers: readonly string[];
|
|
201
|
+
};
|
|
202
|
+
/** Curated capability baseline per mode (D-008: a default, never a final
|
|
203
|
+
* word - runtime verification upgrades source/confidence at attach). */
|
|
204
|
+
readonly capabilities: {
|
|
205
|
+
readonly vision: boolean;
|
|
206
|
+
readonly images: boolean;
|
|
207
|
+
readonly streamingByMode: Readonly<Record<HarnessMode, StreamingGranularity>>;
|
|
208
|
+
readonly session: boolean;
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/knowledge/descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Descriptor types: the shape of what is KNOWN about a harness CLI, as pure
|
|
3
|
+
* data. Interpretation functions consume these; nothing here executes.
|
|
4
|
+
*/
|
|
5
|
+
export const HARNESS_NAMES = ["claude", "codex", "pi", "muse"];
|
|
6
|
+
/** Descriptors are process-wide defaults shared by reference into merged
|
|
7
|
+
* override sets - freezing makes an accidental in-place edit throw instead
|
|
8
|
+
* of corrupting every consumer. */
|
|
9
|
+
/** A 36-char UUID - how every supported harness names its sessions. */
|
|
10
|
+
export const UUID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
11
|
+
export const deepFreeze = (value) => {
|
|
12
|
+
if (typeof value === "object" && value !== null) {
|
|
13
|
+
for (const inner of Object.values(value))
|
|
14
|
+
deepFreeze(inner);
|
|
15
|
+
Object.freeze(value);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
export const SESSION_INPUT_KINDS = ["claude-sdk-user-message"];
|
|
20
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/knowledge/descriptor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAU,CAAC;AAGxE;;mCAEmC;AACnC,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,iEAAiE,CAAC;AAE5F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,KAAQ,EAAK,EAAE;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,yBAAyB,CAAU,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge layer: owns harness descriptors as pure data.
|
|
3
|
+
*
|
|
4
|
+
* Each supported CLI (claude, codex, pi, muse) is described by an immutable
|
|
5
|
+
* descriptor capturing its argv shapes, identity and store locations, flag
|
|
6
|
+
* sets, and capability claims. The point of this module is to keep every fact
|
|
7
|
+
* about a harness in one declarative place as data, rather than scattered
|
|
8
|
+
* through branching logic. It is intentionally NOT responsible for
|
|
9
|
+
* interpreting descriptors or executing processes - those live in the
|
|
10
|
+
* interpretation and execution layers.
|
|
11
|
+
*/
|
|
12
|
+
export { claudeCode } from "./claude-code.js";
|
|
13
|
+
export { codexCli } from "./codex.js";
|
|
14
|
+
export * from "./descriptor.js";
|
|
15
|
+
export { SHARED_AUTH_MATCHERS, SHARED_LIMIT_MATCHERS } from "./matchers.js";
|
|
16
|
+
export { museCode } from "./muse.js";
|
|
17
|
+
export { type DescriptorSet, defaultDescriptors, OverrideRefusalError, parseOverrides, } from "./overrides.js";
|
|
18
|
+
export { piCli } from "./pi.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EACL,KAAK,aAAa,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge layer: owns harness descriptors as pure data.
|
|
3
|
+
*
|
|
4
|
+
* Each supported CLI (claude, codex, pi, muse) is described by an immutable
|
|
5
|
+
* descriptor capturing its argv shapes, identity and store locations, flag
|
|
6
|
+
* sets, and capability claims. The point of this module is to keep every fact
|
|
7
|
+
* about a harness in one declarative place as data, rather than scattered
|
|
8
|
+
* through branching logic. It is intentionally NOT responsible for
|
|
9
|
+
* interpreting descriptors or executing processes - those live in the
|
|
10
|
+
* interpretation and execution layers.
|
|
11
|
+
*/
|
|
12
|
+
export { claudeCode } from "./claude-code.js";
|
|
13
|
+
export { codexCli } from "./codex.js";
|
|
14
|
+
export * from "./descriptor.js";
|
|
15
|
+
export { SHARED_AUTH_MATCHERS, SHARED_LIMIT_MATCHERS } from "./matchers.js";
|
|
16
|
+
export { museCode } from "./muse.js";
|
|
17
|
+
export { defaultDescriptors, OverrideRefusalError, parseOverrides, } from "./overrides.js";
|
|
18
|
+
export { piCli } from "./pi.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wall phrasings every harness shares. v1 applied every pattern to every
|
|
3
|
+
* harness deliberately - a muse turn dying on "You've hit your usage limit"
|
|
4
|
+
* or a provider 401 must classify no matter which CLI printed it. Each
|
|
5
|
+
* descriptor spreads these after its harness-specific phrasings.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuthFailureKind, LimitCode } from "./descriptor.js";
|
|
8
|
+
export declare const SHARED_LIMIT_MATCHERS: ReadonlyArray<readonly [RegExp, LimitCode]>;
|
|
9
|
+
export declare const SHARED_AUTH_MATCHERS: ReadonlyArray<readonly [RegExp, AuthFailureKind]>;
|
|
10
|
+
//# sourceMappingURL=matchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/knowledge/matchers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAK7E,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,CAGlF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const SHARED_LIMIT_MATCHERS = [
|
|
2
|
+
[/you'?ve hit your usage limit/i, "usage-limit"],
|
|
3
|
+
[/usage limit (?:reached|exceeded)/i, "usage-limit"],
|
|
4
|
+
[/purchase more credits|insufficient credits|out of credits/i, "credits"],
|
|
5
|
+
[/resource_exhausted|quota exceeded|exceeded your current quota/i, "quota"],
|
|
6
|
+
];
|
|
7
|
+
export const SHARED_AUTH_MATCHERS = [
|
|
8
|
+
[/401 unauthorized/i, "expired"],
|
|
9
|
+
[/invalid api key/i, "invalid-key"],
|
|
10
|
+
];
|
|
11
|
+
//# sourceMappingURL=matchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchers.js","sourceRoot":"","sources":["../../src/knowledge/matchers.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,qBAAqB,GAAgD;IAChF,CAAC,+BAA+B,EAAE,aAAa,CAAC;IAChD,CAAC,mCAAmC,EAAE,aAAa,CAAC;IACpD,CAAC,4DAA4D,EAAE,SAAS,CAAC;IACzE,CAAC,gEAAgE,EAAE,OAAO,CAAC;CAC5E,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAsD;IACrF,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAChC,CAAC,kBAAkB,EAAE,aAAa,CAAC;CACpC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The muse descriptor: facts about the `muse` CLI as data, verified against
|
|
3
|
+
* Muse Code 0.1.0 and lucid v1's registry. Descriptor groundwork only
|
|
4
|
+
* (D-003). The v1 scars this encodes: headless re-entry is `muse exec
|
|
5
|
+
* --session-id <id>` (the positional `muse resume <id>` is the INTERACTIVE
|
|
6
|
+
* picker - recognized when pasted, never built), and `muse exec` exits 0
|
|
7
|
+
* even when the work inside failed (verification always reruns the
|
|
8
|
+
* project's own checks).
|
|
9
|
+
*/
|
|
10
|
+
import { type HarnessDescriptor } from "./descriptor.js";
|
|
11
|
+
export declare const museCode: HarnessDescriptor;
|
|
12
|
+
//# sourceMappingURL=muse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"muse.d.ts","sourceRoot":"","sources":["../../src/knowledge/muse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAc,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAGjF,eAAO,MAAM,QAAQ,EAAE,iBAiFrB,CAAC"}
|