@clipboard-health/groundcrew 4.7.3 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/crew.config.example.ts +31 -25
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +24 -13
- package/dist/commands/setupWorkspace.d.ts.map +1 -1
- package/dist/commands/setupWorkspace.js +7 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/adapters/linear/fetch.d.ts +1 -1
- package/dist/lib/adapters/linear/fetch.d.ts.map +1 -1
- package/dist/lib/adapters/linear/fetch.js +7 -7
- package/dist/lib/adapters/linear/parsing.d.ts +1 -1
- package/dist/lib/adapters/linear/parsing.d.ts.map +1 -1
- package/dist/lib/adapters/linear/parsing.js +9 -9
- package/dist/lib/buildSecrets.d.ts +2 -2
- package/dist/lib/buildSecrets.js +2 -2
- package/dist/lib/config.d.ts +23 -26
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +79 -49
- package/dist/lib/launchCommand.d.ts +7 -6
- package/dist/lib/launchCommand.d.ts.map +1 -1
- package/dist/lib/launchCommand.js +38 -30
- package/dist/lib/repositoryHooks.d.ts +8 -0
- package/dist/lib/repositoryHooks.d.ts.map +1 -0
- package/dist/lib/repositoryHooks.js +71 -0
- package/docs/adr/0001-groundcrew-uses-but-does-not-provision-sandboxes.md +1 -1
- package/docs/configuration.md +66 -36
- package/docs/credentials.md +6 -6
- package/docs/setup-hook-agent-prompt.md +46 -49
- package/docs/setup-hooks.md +64 -29
- package/docs/troubleshooting.md +3 -3
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ Groundcrew watches assigned tickets, creates isolated worktrees, launches agent
|
|
|
27
27
|
- **One worktree per ticket.** Agents work in parallel without stepping on each other.
|
|
28
28
|
- **Pluggable ticket sources.** Linear by default; Jira and local files via [ticket sources](./docs/ticket-sources.md).
|
|
29
29
|
- **Local-first isolation.** Safehouse, Docker Sandboxes, or an explicit `none` escape hatch.
|
|
30
|
-
- **Multi-agent routing.** Ships
|
|
30
|
+
- **Multi-agent routing.** Ships `claude` and `codex` presets; bring your own CLI in config.
|
|
31
31
|
|
|
32
32
|
## Prerequisites
|
|
33
33
|
|
|
@@ -59,7 +59,7 @@ crew doctor
|
|
|
59
59
|
crew run --watch
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
`crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos.
|
|
62
|
+
`crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos. `--model claude` or `--model codex` chooses the single built-in model preset to enable in the generated config.
|
|
63
63
|
|
|
64
64
|
## Ticket Pickup
|
|
65
65
|
|
|
@@ -96,7 +96,7 @@ See [command details](./docs/commands.md) for status output, doctor behavior, an
|
|
|
96
96
|
|
|
97
97
|
## Configuration
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
Workspace settings and at least one enabled model are required; everything else has a default.
|
|
100
100
|
|
|
101
101
|
```ts
|
|
102
102
|
import type { Config } from "@clipboard-health/groundcrew";
|
|
@@ -112,7 +112,7 @@ export default {
|
|
|
112
112
|
models: {
|
|
113
113
|
default: "claude",
|
|
114
114
|
definitions: {
|
|
115
|
-
|
|
115
|
+
claude: {},
|
|
116
116
|
},
|
|
117
117
|
},
|
|
118
118
|
} satisfies Config;
|
|
@@ -125,7 +125,7 @@ There is no `linear` config block. Groundcrew reads `GROUNDCREW_LINEAR_API_KEY`
|
|
|
125
125
|
- [Configuration](./docs/configuration.md): discovery order, repo layout, full config table, prompt customization.
|
|
126
126
|
- [Runners](./docs/runners.md): Safehouse, Docker Sandboxes, and the `none` escape hatch.
|
|
127
127
|
- [Credentials](./docs/credentials.md): Linear API keys, 1Password, build secrets, and `preLaunch`.
|
|
128
|
-
- [
|
|
128
|
+
- [Prepare worktree hooks](./docs/setup-hooks.md): `.groundcrew/config.json` `hooks.prepareWorktree` for per-repo dependency setup.
|
|
129
129
|
- [Ticket sources](./docs/ticket-sources.md): custom shell/Jira/local-plan adapters.
|
|
130
130
|
- [Troubleshooting](./docs/troubleshooting.md): common operational pitfalls and fixes.
|
|
131
131
|
|
package/crew.config.example.ts
CHANGED
|
@@ -20,6 +20,21 @@ export default {
|
|
|
20
20
|
// tickets to these and refuses unknown repos by default.
|
|
21
21
|
knownRepositories: ["your-org/your-repo"],
|
|
22
22
|
},
|
|
23
|
+
models: {
|
|
24
|
+
default: "claude",
|
|
25
|
+
// `definitions` is the enabled model set. Built-in keys can use `{}` to
|
|
26
|
+
// opt into the shipped command/color/usage preset. Add `codex: {}` if you
|
|
27
|
+
// want both shipped agents, or add a custom entry and tag tickets with
|
|
28
|
+
// `agent-<name>`.
|
|
29
|
+
definitions: {
|
|
30
|
+
claude: {},
|
|
31
|
+
// codex: {},
|
|
32
|
+
// cursor: {
|
|
33
|
+
// cmd: "cursor-agent",
|
|
34
|
+
// color: "#929292",
|
|
35
|
+
// },
|
|
36
|
+
},
|
|
37
|
+
},
|
|
23
38
|
// Everything below is optional — defaults shown for reference. Uncomment
|
|
24
39
|
// and edit to override.
|
|
25
40
|
//
|
|
@@ -44,37 +59,28 @@ export default {
|
|
|
44
59
|
//
|
|
45
60
|
// git: { remote: "origin", defaultBranch: "main" },
|
|
46
61
|
//
|
|
62
|
+
// // Fallback repo-preparation hook for repos that do not define
|
|
63
|
+
// // `.groundcrew/config.json` hooks.prepareWorktree. Repo-local config wins.
|
|
64
|
+
// defaults: {
|
|
65
|
+
// hooks: {
|
|
66
|
+
// prepareWorktree: "test ! -f package-lock.json || npm ci",
|
|
67
|
+
// },
|
|
68
|
+
// },
|
|
69
|
+
//
|
|
47
70
|
// orchestrator: {
|
|
48
71
|
// maximumInProgress: 4,
|
|
49
72
|
// pollIntervalMilliseconds: 120_000,
|
|
50
73
|
// sessionLimitPercentage: 85,
|
|
51
74
|
// },
|
|
52
75
|
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
// //
|
|
56
|
-
// //
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
// cmd: "cursor-agent",
|
|
62
|
-
// color: "#929292",
|
|
63
|
-
// },
|
|
64
|
-
// // Optional: mint a short-lived credential outside Safehouse and
|
|
65
|
-
// // forward it into the agent. `preLaunch` runs in the launch shell
|
|
66
|
-
// // before the agent exec; `preLaunchEnv` lists the names to add to
|
|
67
|
-
// // groundcrew's `safehouse-clearance --env-pass=` flag so the wrap's
|
|
68
|
-
// // egress allowlist stays intact. Chain with `&&` so a failed mint
|
|
69
|
-
// // aborts launch before `export`.
|
|
70
|
-
// // claude: {
|
|
71
|
-
// // preLaunch: "SESSION_TOKEN=$(your-mint-command) && export SESSION_TOKEN",
|
|
72
|
-
// // preLaunchEnv: ["SESSION_TOKEN"],
|
|
73
|
-
// // },
|
|
74
|
-
// // To run a model under the sdx (Docker Sandboxes) runner, bind it to
|
|
75
|
-
// // an sbx agent. Required when `local.runner` resolves to `sdx`.
|
|
76
|
-
// // claude: { sandbox: { agent: "claude" } },
|
|
77
|
-
// },
|
|
76
|
+
// To customize an enabled built-in, replace `claude: {}` above with:
|
|
77
|
+
// claude: {
|
|
78
|
+
// // Optional: mint a short-lived credential outside Safehouse and forward
|
|
79
|
+
// // it into the agent. Chain with `&&` so a failed mint aborts launch.
|
|
80
|
+
// preLaunch: "SESSION_TOKEN=$(your-mint-command) && export SESSION_TOKEN",
|
|
81
|
+
// preLaunchEnv: ["SESSION_TOKEN"],
|
|
82
|
+
// // Required for this model when `local.runner` resolves to `sdx`.
|
|
83
|
+
// sandbox: { agent: "claude" },
|
|
78
84
|
// },
|
|
79
85
|
//
|
|
80
86
|
// // Local isolation backend. Defaults to `"auto"` — macOS → safehouse,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuKH,wBAAsB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CA8E/C"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -14,7 +14,7 @@ import { resolveWorkspaceKind } from "../lib/workspaces.js";
|
|
|
14
14
|
// Tokenization stops after this many non-flag tokens. Two is enough to
|
|
15
15
|
// catch wrapper + wrapped CLI commands like `safehouse claude --foo`.
|
|
16
16
|
const MAX_TOKENS_PER_CMD = 2;
|
|
17
|
-
const
|
|
17
|
+
const BUILT_IN_MODEL_NAMES = ["claude", "codex"];
|
|
18
18
|
async function checkCmd(cmd, required, hint) {
|
|
19
19
|
const path = await which(cmd);
|
|
20
20
|
const resolvedHint = path ?? hint;
|
|
@@ -120,12 +120,12 @@ function modelCliHint(modelName, token) {
|
|
|
120
120
|
if (token !== modelName) {
|
|
121
121
|
return undefined;
|
|
122
122
|
}
|
|
123
|
-
if (!
|
|
123
|
+
if (!isBuiltInModelName(modelName)) {
|
|
124
124
|
return undefined;
|
|
125
125
|
}
|
|
126
|
-
return `install ${token} or
|
|
126
|
+
return `install ${token} or remove \`models.definitions.${modelName}\` from crew.config.ts`;
|
|
127
127
|
}
|
|
128
|
-
function
|
|
128
|
+
function isBuiltInModelName(value) {
|
|
129
129
|
return value === "claude" || value === "codex";
|
|
130
130
|
}
|
|
131
131
|
function format(check) {
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ interface InitConfigOptions {
|
|
|
23
23
|
repositories?: string[];
|
|
24
24
|
/** Pre-fill local.runner in the generated config. */
|
|
25
25
|
runner?: LocalRunnerSetting;
|
|
26
|
-
/**
|
|
26
|
+
/** Choose the single built-in model preset enabled by the generated config. */
|
|
27
27
|
model?: InitModel;
|
|
28
28
|
/** Override the source template path. */
|
|
29
29
|
examplePath?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUlF,QAAA,MAAM,WAAW,YAAI,QAAQ,EAAE,OAAO,CAAU,CAAC;AAEjD,KAAK,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1C,KAAK,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,UAAU,iBAAiB;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUlF,QAAA,MAAM,WAAW,YAAI,QAAQ,EAAE,OAAO,CAAU,CAAC;AAEjD,KAAK,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1C,KAAK,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,UAAU,iBAAiB;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,qBAAqB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpE,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAoB5E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -164,28 +164,39 @@ function renderConfig(source, options) {
|
|
|
164
164
|
contents = replaceRequired(contents, ` // local: { runner: "auto" },`, ` local: { runner: ${tsString(options.runner)} },`, "--runner");
|
|
165
165
|
}
|
|
166
166
|
if (options.model !== undefined) {
|
|
167
|
-
contents = replaceRequired(contents, "
|
|
167
|
+
contents = replaceRequired(contents, ` default: "claude",`, ` default: ${tsString(options.model)},`, "--model");
|
|
168
|
+
contents = replaceRequired(contents, " claude: {},", ` ${options.model}: {},`, "--model");
|
|
169
|
+
contents = removeDuplicateModelDefinitionLines(contents, options.model);
|
|
168
170
|
}
|
|
169
171
|
return contents;
|
|
170
172
|
}
|
|
173
|
+
function removeDuplicateModelDefinitionLines(contents, model) {
|
|
174
|
+
const linePattern = new RegExp(`^\\s*(?://\\s*)?${escapeRegExp(model)}:\\s*\\{\\},\\s*$`);
|
|
175
|
+
let hasActiveEntry = false;
|
|
176
|
+
return contents
|
|
177
|
+
.split("\n")
|
|
178
|
+
.filter((line) => {
|
|
179
|
+
if (!linePattern.test(line)) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
const isCommented = line.trimStart().startsWith("//");
|
|
183
|
+
if (!isCommented && !hasActiveEntry) {
|
|
184
|
+
hasActiveEntry = true;
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
})
|
|
189
|
+
.join("\n");
|
|
190
|
+
}
|
|
191
|
+
function escapeRegExp(value) {
|
|
192
|
+
return value.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw `\$&`);
|
|
193
|
+
}
|
|
171
194
|
function replaceRequired(contents, search, replacement, flag) {
|
|
172
195
|
if (!contents.includes(search)) {
|
|
173
196
|
throw new Error(`crew init ${flag}: template anchor not found in ${EXAMPLE_FILE_NAME}`);
|
|
174
197
|
}
|
|
175
198
|
return contents.replace(search, replacement);
|
|
176
199
|
}
|
|
177
|
-
function modelBlock(model) {
|
|
178
|
-
const disabled = model === "claude" ? "codex" : "claude";
|
|
179
|
-
return [
|
|
180
|
-
" models: {",
|
|
181
|
-
` default: ${tsString(model)},`,
|
|
182
|
-
" definitions: {",
|
|
183
|
-
` ${disabled}: { disabled: true },`,
|
|
184
|
-
" },",
|
|
185
|
-
" },",
|
|
186
|
-
"",
|
|
187
|
-
].join("\n");
|
|
188
|
-
}
|
|
189
200
|
function writeInitGuidance(destination, options) {
|
|
190
201
|
writeOutput("");
|
|
191
202
|
writeOutput("Next steps:");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupWorkspace.d.ts","sourceRoot":"","sources":["../../src/commands/setupWorkspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"setupWorkspace.d.ts","sourceRoot":"","sources":["../../src/commands/setupWorkspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkBnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAuBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,EAC9B,UAAU,GAAE,wBAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAqHf;AAyID,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -4,6 +4,7 @@ import { openAgentWorkspace, prepareAgentLaunch } from "../lib/agentLaunch.js";
|
|
|
4
4
|
import { createBoard } from "../lib/board.js";
|
|
5
5
|
import { buildSources, sourcesFromConfig } from "../lib/buildSources.js";
|
|
6
6
|
import { buildLaunchCommand } from "../lib/launchCommand.js";
|
|
7
|
+
import { resolvePrepareWorktreeCommand } from "../lib/repositoryHooks.js";
|
|
7
8
|
import { recordRunState } from "../lib/runState.js";
|
|
8
9
|
import { stageBuildSecrets, stagePromptFromTemplate, stageWorkspaceLaunchCommand, } from "../lib/stagedLaunch.js";
|
|
9
10
|
import { naturalIdFromCanonical } from "../lib/ticketSource.js";
|
|
@@ -73,12 +74,17 @@ export async function setupWorkspace(config, options, runOptions = {}) {
|
|
|
73
74
|
workspaceContinuationInstruction: renderWorkspaceContinuationInstruction(accessHint),
|
|
74
75
|
});
|
|
75
76
|
promptDir = stagedPrompt.directory;
|
|
76
|
-
const
|
|
77
|
+
const prepareWorktreeCommand = resolvePrepareWorktreeCommand({
|
|
78
|
+
worktreeDir: launchDir,
|
|
79
|
+
defaultHooks: config.defaults.hooks,
|
|
80
|
+
});
|
|
81
|
+
const secretsFile = prepareWorktreeCommand === undefined ? undefined : stageBuildSecrets(promptDir);
|
|
77
82
|
const launchCommand = buildLaunchCommand({
|
|
78
83
|
definition,
|
|
79
84
|
promptFile: stagedPrompt.file,
|
|
80
85
|
worktreeDir: launchDir,
|
|
81
86
|
secretsFile,
|
|
87
|
+
prepareWorktreeCommand,
|
|
82
88
|
runner,
|
|
83
89
|
sandboxName,
|
|
84
90
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { orchestrate, type OrchestratorOptions } from "./commands/orchestrator.t
|
|
|
6
6
|
export { resumeWorkspace, type ResumeWorkspaceOptions } from "./commands/resumeWorkspace.ts";
|
|
7
7
|
export { setupWorkspace, type SetupWorkspaceOptions } from "./commands/setupWorkspace.ts";
|
|
8
8
|
export { status, type StatusOptions } from "./commands/status.ts";
|
|
9
|
-
export type { Config, ModelDefinition, ResolvedConfig, SourceConfig } from "./lib/config.ts";
|
|
9
|
+
export type { Config, HookCommands, ModelDefinition, ResolvedConfig, SourceConfig, } from "./lib/config.ts";
|
|
10
10
|
export { loadConfig } from "./lib/config.ts";
|
|
11
11
|
export { readRunState, recordRunState, removeRunState, runStateDirectory, runStatePath, updateRunState, type RunLifecycleState, type RunState, } from "./lib/runState.ts";
|
|
12
12
|
export { fetchBlockersForTicket, fetchInProgressIssueCount, fetchRawLinearIssue, fetchResolvedIssue, isIssueInProgress, isIssueTodo, isTerminalStateType, isTerminalStatusForBlocker, isTerminalStatusForIssue, type RawLinearIssue, } from "./lib/adapters/linear/fetch.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EACV,MAAM,EACN,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,QAAQ,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,cAAc,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,KAAK,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,aAAa,EACb,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,KAAK,OAAO,IAAI,gBAAgB,EAChC,KAAK,UAAU,IAAI,mBAAmB,EACtC,KAAK,eAAe,EACpB,KAAK,eAAe,IAAI,wBAAwB,EAChD,KAAK,KAAK,IAAI,cAAc,EAC5B,iBAAiB,IAAI,0BAA0B,EAC/C,KAAK,UAAU,IAAI,mBAAmB,EACtC,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC"}
|
|
@@ -158,7 +158,7 @@ export declare function fetchResolvedIssue(arguments_: {
|
|
|
158
158
|
config: ResolvedConfig;
|
|
159
159
|
ticket: string;
|
|
160
160
|
}): Promise<ResolvedIssue>;
|
|
161
|
-
export declare function
|
|
161
|
+
export declare function warnIfNotEnabledFallback(ticket: string, modelResolution: ModelResolution, config: ResolvedConfig): void;
|
|
162
162
|
export declare function blockersFromRelations(relations: IssueRelationNode[]): Blocker[];
|
|
163
163
|
export {};
|
|
164
164
|
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/linear/fetch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/linear/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -138,7 +138,7 @@ export function modelForResolution(resolution) {
|
|
|
138
138
|
if (resolution.kind === "matched") {
|
|
139
139
|
return resolution.model;
|
|
140
140
|
}
|
|
141
|
-
if (resolution.kind === "
|
|
141
|
+
if (resolution.kind === "not-enabled-fallback") {
|
|
142
142
|
return resolution.fallbackModel;
|
|
143
143
|
}
|
|
144
144
|
return "any";
|
|
@@ -185,7 +185,7 @@ function buildLinearIssue(input) {
|
|
|
185
185
|
}
|
|
186
186
|
function issueFromNode(node, config) {
|
|
187
187
|
const modelResolution = resolveModelFor({ labels: node.labels.nodes, config });
|
|
188
|
-
|
|
188
|
+
warnIfNotEnabledFallback(node.identifier, modelResolution, config);
|
|
189
189
|
const { repository, model } = resolveAgentMetadata({
|
|
190
190
|
ticket: node.identifier,
|
|
191
191
|
/* v8 ignore next @preserve -- BoardIssues query selects description; the ?? guard normalises a null vs undefined edge */
|
|
@@ -358,12 +358,12 @@ export async function fetchResolvedIssue(arguments_) {
|
|
|
358
358
|
});
|
|
359
359
|
}
|
|
360
360
|
const modelResolution = resolveModelFor({ labels: raw.labels, config });
|
|
361
|
-
|
|
361
|
+
warnIfNotEnabledFallback(ticket, modelResolution, config);
|
|
362
362
|
let model = config.models.default;
|
|
363
363
|
if (modelResolution.kind === "matched") {
|
|
364
364
|
({ model } = modelResolution);
|
|
365
365
|
}
|
|
366
|
-
else if (modelResolution.kind === "
|
|
366
|
+
else if (modelResolution.kind === "not-enabled-fallback") {
|
|
367
367
|
model = modelResolution.fallbackModel;
|
|
368
368
|
}
|
|
369
369
|
return {
|
|
@@ -379,11 +379,11 @@ export async function fetchResolvedIssue(arguments_) {
|
|
|
379
379
|
url: raw.url,
|
|
380
380
|
};
|
|
381
381
|
}
|
|
382
|
-
export function
|
|
383
|
-
if (modelResolution.kind !== "
|
|
382
|
+
export function warnIfNotEnabledFallback(ticket, modelResolution, config) {
|
|
383
|
+
if (modelResolution.kind !== "not-enabled-fallback") {
|
|
384
384
|
return;
|
|
385
385
|
}
|
|
386
|
-
log(`${ticket.toLowerCase()}: agent-${modelResolution.requestedModel} label refers to a
|
|
386
|
+
log(`${ticket.toLowerCase()}: agent-${modelResolution.requestedModel} label refers to a model that is not enabled; falling back to models.default (${config.models.default})`);
|
|
387
387
|
}
|
|
388
388
|
export function blockersFromRelations(relations) {
|
|
389
389
|
return relations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/linear/parsing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjG,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/linear/parsing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjG,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AASpF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAUnE;AAiDD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE;IAC/C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,cAAc,CAAC;CACxB,GAAG,oBAAoB,CAuBvB;AAED,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,wBAAwB,GAAG,MAAM,CA2B5E;AAkDD,wBAAgB,eAAe,CAAC,UAAU,EAAE;IAC1C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB,GAAG,eAAe,CAiBlB"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Linear adapter — parsing helpers for model/repository resolution from
|
|
3
3
|
* issue labels and descriptions. Extracted from boardSource.ts (Task 10).
|
|
4
4
|
*/
|
|
5
|
-
import { AGENT_ANY_MODEL,
|
|
5
|
+
import { AGENT_ANY_MODEL, isBuiltInModelNotEnabled } from "../../config.js";
|
|
6
6
|
import { RepositoryResolutionError } from "../../ticketSource.js";
|
|
7
7
|
export const AGENT_LABEL_PREFIX = "agent-";
|
|
8
8
|
function escapeRegex(value) {
|
|
@@ -102,7 +102,7 @@ function parseAgentLabels(labels, config) {
|
|
|
102
102
|
if (agentLabels.length === 0) {
|
|
103
103
|
return undefined;
|
|
104
104
|
}
|
|
105
|
-
let
|
|
105
|
+
let notEnabledFallback;
|
|
106
106
|
for (const label of agentLabels) {
|
|
107
107
|
const name = label.name.slice(AGENT_LABEL_PREFIX.length);
|
|
108
108
|
if (name === AGENT_ANY_MODEL) {
|
|
@@ -114,13 +114,13 @@ function parseAgentLabels(labels, config) {
|
|
|
114
114
|
if (Object.hasOwn(config.models.definitions, name)) {
|
|
115
115
|
return { model: name };
|
|
116
116
|
}
|
|
117
|
-
if (
|
|
118
|
-
|
|
117
|
+
if (notEnabledFallback === undefined && isBuiltInModelNotEnabled(config, name)) {
|
|
118
|
+
notEnabledFallback = name;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
const fallback = { model: config.models.default };
|
|
122
|
-
if (
|
|
123
|
-
fallback.
|
|
122
|
+
if (notEnabledFallback !== undefined) {
|
|
123
|
+
fallback.notEnabledFallback = notEnabledFallback;
|
|
124
124
|
}
|
|
125
125
|
return fallback;
|
|
126
126
|
}
|
|
@@ -133,10 +133,10 @@ export function resolveModelFor(arguments_) {
|
|
|
133
133
|
if (parsed.model === AGENT_ANY_MODEL) {
|
|
134
134
|
return { kind: "agent-any" };
|
|
135
135
|
}
|
|
136
|
-
if (parsed.
|
|
136
|
+
if (parsed.notEnabledFallback !== undefined) {
|
|
137
137
|
return {
|
|
138
|
-
kind: "
|
|
139
|
-
requestedModel: parsed.
|
|
138
|
+
kind: "not-enabled-fallback",
|
|
139
|
+
requestedModel: parsed.notEnabledFallback,
|
|
140
140
|
fallbackModel: parsed.model,
|
|
141
141
|
};
|
|
142
142
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build-time secrets we shuttle into
|
|
3
|
-
* process must not inherit these values.
|
|
2
|
+
* Build-time secrets we shuttle into prepareWorktree phases only. The launched
|
|
3
|
+
* agent process must not inherit these values.
|
|
4
4
|
*/
|
|
5
5
|
export declare const BUILD_SECRET_NAMES: readonly ["NPM_TOKEN", "BUF_TOKEN"];
|
|
6
6
|
//# sourceMappingURL=buildSecrets.d.ts.map
|
package/dist/lib/buildSecrets.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build-time secrets we shuttle into
|
|
3
|
-
* process must not inherit these values.
|
|
2
|
+
* Build-time secrets we shuttle into prepareWorktree phases only. The launched
|
|
3
|
+
* agent process must not inherit these values.
|
|
4
4
|
*/
|
|
5
5
|
export const BUILD_SECRET_NAMES = ["NPM_TOKEN", "BUF_TOKEN"];
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ export { BUILD_SECRET_NAMES } from "./buildSecrets.ts";
|
|
|
8
8
|
* adapter's `schema.ts` and runs at `buildSources` time, not here.
|
|
9
9
|
*/
|
|
10
10
|
export type SourceConfig = LinearAdapterConfig | ShellAdapterConfig;
|
|
11
|
+
export interface HookCommands {
|
|
12
|
+
prepareWorktree?: string;
|
|
13
|
+
}
|
|
11
14
|
/**
|
|
12
15
|
* Reserved model name. A ticket labeled `agent-any` resolves at runtime
|
|
13
16
|
* to the configured model with the most available session capacity, so
|
|
@@ -47,12 +50,6 @@ export declare const LOCAL_RUNNER_SETTINGS: readonly LocalRunnerSetting[];
|
|
|
47
50
|
export interface SandboxDefinition {
|
|
48
51
|
/** sbx agent name (e.g. "claude", "codex"). */
|
|
49
52
|
agent: string;
|
|
50
|
-
/**
|
|
51
|
-
* Setup command run **inside** the sandbox before the agent exec.
|
|
52
|
-
* Defaults to the shared `.groundcrew/setup.sh --deps-only` convention
|
|
53
|
-
* (see `launchCommand.ts`) when omitted.
|
|
54
|
-
*/
|
|
55
|
-
setupCommand?: string;
|
|
56
53
|
}
|
|
57
54
|
export interface ModelDefinition {
|
|
58
55
|
/**
|
|
@@ -69,7 +66,7 @@ export interface ModelDefinition {
|
|
|
69
66
|
* exec'd and **outside** Safehouse/sdx. Use to mint short-lived credentials
|
|
70
67
|
* (e.g. `export SESSION_TOKEN=...`) that the wrapped `cmd` inherits via
|
|
71
68
|
* the process environment. `{{worktree}}` is replaced before launch.
|
|
72
|
-
* Failures abort launch (unlike
|
|
69
|
+
* Failures abort launch (unlike prepareWorktree, which logs and continues).
|
|
73
70
|
* Not supported for `local.runner` `sdx` in v1.
|
|
74
71
|
*/
|
|
75
72
|
preLaunch?: string;
|
|
@@ -103,26 +100,21 @@ export interface ModelDefinition {
|
|
|
103
100
|
sandbox?: SandboxDefinition;
|
|
104
101
|
}
|
|
105
102
|
/**
|
|
106
|
-
* User-facing model entry shape.
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* disable directive (`{ disabled: true }` and nothing else).
|
|
103
|
+
* User-facing model entry shape. Built-in model names (`claude`, `codex`)
|
|
104
|
+
* accept empty or partial entries because they merge over built-in presets.
|
|
105
|
+
* Brand-new model names must supply enough fields to satisfy `validate()`.
|
|
110
106
|
*
|
|
111
107
|
* `usage` accepts an extra `{ disabled: true }` sentinel that strips the
|
|
112
108
|
* usage block from the merged definition — the only way to opt a shipped
|
|
113
|
-
*
|
|
109
|
+
* preset out of codexbar gating without removing the model entirely.
|
|
114
110
|
*/
|
|
115
111
|
type UserUsage = ModelDefinition["usage"] | {
|
|
116
112
|
disabled: true;
|
|
117
113
|
};
|
|
118
114
|
type EnabledUserModelDefinition = Partial<Omit<ModelDefinition, "usage">> & {
|
|
119
115
|
usage?: UserUsage;
|
|
120
|
-
disabled?: never;
|
|
121
116
|
};
|
|
122
|
-
|
|
123
|
-
disabled: true;
|
|
124
|
-
}
|
|
125
|
-
type UserModelDefinition = EnabledUserModelDefinition | DisabledUserModelDefinition;
|
|
117
|
+
type UserModelDefinition = EnabledUserModelDefinition;
|
|
126
118
|
/**
|
|
127
119
|
* Loose user-facing shape — what a `config.ts` file declares.
|
|
128
120
|
* Fields with defaults are optional; only `workspace.*` is required.
|
|
@@ -153,6 +145,9 @@ export interface Config {
|
|
|
153
145
|
projectDir: string;
|
|
154
146
|
knownRepositories: string[];
|
|
155
147
|
};
|
|
148
|
+
defaults?: {
|
|
149
|
+
hooks?: HookCommands;
|
|
150
|
+
};
|
|
156
151
|
orchestrator?: {
|
|
157
152
|
maximumInProgress?: number;
|
|
158
153
|
pollIntervalMilliseconds?: number;
|
|
@@ -161,10 +156,10 @@ export interface Config {
|
|
|
161
156
|
models?: {
|
|
162
157
|
default?: string;
|
|
163
158
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
159
|
+
* Explicit enabled model set. Built-in keys (`claude`, `codex`) merge over
|
|
160
|
+
* their presets, so `{ claude: {} }` enables Claude with the shipped
|
|
161
|
+
* command/color/usage. Brand-new model names must supply enough fields to
|
|
162
|
+
* satisfy `validate()`.
|
|
168
163
|
*/
|
|
169
164
|
definitions?: Record<string, UserModelDefinition>;
|
|
170
165
|
};
|
|
@@ -214,6 +209,9 @@ export interface ResolvedConfig {
|
|
|
214
209
|
projectDir: string;
|
|
215
210
|
knownRepositories: string[];
|
|
216
211
|
};
|
|
212
|
+
defaults: {
|
|
213
|
+
hooks: HookCommands;
|
|
214
|
+
};
|
|
217
215
|
orchestrator: {
|
|
218
216
|
maximumInProgress: number;
|
|
219
217
|
pollIntervalMilliseconds: number;
|
|
@@ -255,11 +253,10 @@ export interface ResolvedConfig {
|
|
|
255
253
|
*/
|
|
256
254
|
export declare function hasPreLaunchEnv(definition: Pick<ModelDefinition, "preLaunchEnv">): boolean;
|
|
257
255
|
/**
|
|
258
|
-
* True when `name` is a
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
* Consumers needing to distinguish disabled-by-user from unknown-label use this.
|
|
256
|
+
* True when `name` is a built-in preset but not present in the enabled
|
|
257
|
+
* definitions. Consumers use this to distinguish `agent-codex` when codex is
|
|
258
|
+
* not enabled from an arbitrary unknown label like `agent-typo`.
|
|
262
259
|
*/
|
|
263
|
-
export declare function
|
|
260
|
+
export declare function isBuiltInModelNotEnabled(config: Pick<ResolvedConfig, "models">, name: string): boolean;
|
|
264
261
|
export declare function loadConfig(): Promise<Readonly<ResolvedConfig>>;
|
|
265
262
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAIzD,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAKrD,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAIzD,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAKrD,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACjD,CAAC;IACF;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,KAAK,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAC/D,KAAK,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AACF,KAAK,mBAAmB,GAAG,0BAA0B,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;KACnD,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,YAAY,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,wBAAwB,EAAE,MAAM,CAAC;QACjC,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC9C,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;OAGG;IACH,aAAa,EAAE,oBAAoB,CAAC;IACpC;;;;OAIG;IACH,KAAK,EAAE;QACL,MAAM,EAAE,kBAAkB,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA2MD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,GAAG,OAAO,CAE1F;AA6FD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAKT;AA8aD,wBAAsB,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAwBpE"}
|