@ai-outfitter/outfitter 1.0.2 → 1.1.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 +33 -23
- package/code/enterprise/cli/privateCatalogGate.cjs +3 -3
- package/code/pi-extension/src/outfitter-runtime-extension.js +45 -6
- package/dist/cli/OutfitterCli.js +4 -7
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/DumpCommand.js +8 -3
- package/dist/cli/commands/DumpCommand.js.map +1 -1
- package/dist/cli/commands/ListCommand.js +4 -3
- package/dist/cli/commands/ListCommand.js.map +1 -1
- package/dist/cli/commands/PiRuntimeLaunch.d.ts +14 -4
- package/dist/cli/commands/PiRuntimeLaunch.js +23 -27
- package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -1
- package/dist/cli/commands/RunAgentCommand.js +8 -3
- package/dist/cli/commands/RunAgentCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +1 -1
- package/dist/cli/commands/SetupCommand.js +6 -13
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/SyncCommand.d.ts +31 -0
- package/dist/cli/commands/SyncCommand.js +162 -0
- package/dist/cli/commands/SyncCommand.js.map +1 -0
- package/dist/cli/commands/ValidateCommand.js +4 -2
- package/dist/cli/commands/ValidateCommand.js.map +1 -1
- package/dist/composer/Composer.js +1 -0
- package/dist/composer/Composer.js.map +1 -1
- package/dist/composer/Composition.d.ts +2 -0
- package/dist/paths/RepositoryAssets.d.ts +4 -0
- package/dist/paths/RepositoryAssets.js +26 -0
- package/dist/paths/RepositoryAssets.js.map +1 -0
- package/dist/resolver/AgentDefinition.d.ts +2 -0
- package/dist/resolver/AgentDefinition.js +2 -0
- package/dist/resolver/AgentDefinition.js.map +1 -1
- package/dist/resolver/Layer.d.ts +17 -1
- package/dist/resolver/Layer.js +23 -15
- package/dist/resolver/Layer.js.map +1 -1
- package/dist/resolver/ResolverContext.d.ts +2 -0
- package/dist/resolver/ResolverContext.js +7 -2
- package/dist/resolver/ResolverContext.js.map +1 -1
- package/dist/schemas/agent.schema.json +1 -0
- package/dist/settings/SettingsLoader.d.ts +12 -3
- package/dist/settings/SettingsLoader.js +25 -11
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/setup/DefaultCatalog.d.ts +2 -1
- package/dist/setup/DefaultCatalog.js +25 -50
- package/dist/setup/DefaultCatalog.js.map +1 -1
- package/dist/sources/GitRepository.d.ts +28 -0
- package/dist/sources/GitRepository.js +139 -0
- package/dist/sources/GitRepository.js.map +1 -0
- package/dist/sources/PrivateCatalogGate.d.ts +27 -0
- package/dist/sources/PrivateCatalogGate.js +23 -0
- package/dist/sources/PrivateCatalogGate.js.map +1 -0
- package/dist/sources/SourceCache.d.ts +11 -1
- package/dist/sources/SourceCache.js +11 -2
- package/dist/sources/SourceCache.js.map +1 -1
- package/dist/version/OutfitterVersion.d.ts +1 -0
- package/dist/version/OutfitterVersion.js +8 -0
- package/dist/version/OutfitterVersion.js.map +1 -0
- package/docs/documentation/README.md +46 -31
- package/docs/documentation/actions.md +3 -1
- package/docs/documentation/agents.md +5 -0
- package/docs/documentation/catalogs.md +10 -2
- package/docs/documentation/cli.md +11 -3
- package/docs/documentation/concepts.md +6 -6
- package/docs/documentation/conventions.md +55 -0
- package/docs/documentation/in-cluster.md +35 -0
- package/docs/documentation/recurring-runs.md +27 -0
- package/docs/documentation/settings.md +4 -2
- package/docs/documentation/subagents.md +16 -5
- package/docs/documentation/usecases/flaky-test-postmortems.md +20 -0
- package/docs/documentation/usecases/grafana-alert-investigator.md +18 -0
- package/docs/documentation/usecases/resident-agents.md +36 -0
- package/docs/documentation/usecases/self-improving-skills.md +19 -0
- package/docs/documentation/usecases/shared-conventions.md +47 -0
- package/package.json +1 -1
- package/src/schemas/agent.schema.json +1 -0
package/README.md
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
# Outfitter
|
|
2
2
|
|
|
3
|
-
Outfitter is the toolchain for
|
|
3
|
+
Outfitter is the toolchain for [`.agents`](./docs/documentation/concepts.md#the-agents-protocol): it resolves agent configuration from local and remote `.agents` trees, composes agents, skills, and knowledge by slug, and launches the result through wrapped agent CLIs like [`pi`](https://github.com/earendil-works/pi-coding-agent) and Claude Code.
|
|
4
4
|
|
|
5
5
|
Outfitter does not own a configuration format. Your `.agents/` directory is the source of truth — useful without Outfitter, committed and reviewed like any other code.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Why
|
|
8
|
+
|
|
9
|
+
Your agent setup is configuration: prompts, skills, MCP servers, model choices, permissions. Left alone it lives per tool and per laptop, gets pasted between repos, and drifts. Outfitter treats it like the rest of your infrastructure — layered, composed by slug, pinned by SHA, reviewed through pull requests.
|
|
10
|
+
|
|
11
|
+
That turns one person's improvement into everyone's default. On Monday a platform engineer writes a `grafana-alert-investigate` skill in their own `~/.agents` tree and uses it at their desk. By Friday it is merged into the org catalog, pinned by SHA, and selected by slug from an agent that also runs on a CI schedule and in the cluster. Nobody else configured anything — their next run composes the new skill, and it costs their context window one line of routing metadata until it activates.
|
|
12
|
+
|
|
13
|
+
Two conventions do most of that work:
|
|
14
|
+
|
|
15
|
+
- Iterate on it in your own `~/.agents` against real work, then share it by pull request — to the project, your org's catalog, or a community catalog. Everyone composes the shared version back by slug, and anything they need different they override in their own layer instead of copying. See [Conventions](./docs/documentation/conventions.md).
|
|
16
|
+
|
|
17
|
+
- The same composition runs everywhere work happens: interactively at your desk, [in GitHub Actions](./docs/documentation/actions.md) on any trigger, as [recurring loops](./docs/documentation/recurring-runs.md) — locally, on a CI cron, or on a cluster schedule — and as resident or job-based agents [in Kubernetes](./docs/documentation/in-cluster.md). Surface availability varies by release; each page notes its status.
|
|
18
|
+
|
|
19
|
+
For the full argument, read the [Philosophy](./docs/philosophy.md).
|
|
8
20
|
|
|
9
21
|
## Quick start
|
|
10
22
|
|
|
@@ -64,30 +76,28 @@ Managed porting and persistent harness symlinks are deferred to
|
|
|
64
76
|
commands/ # slash commands
|
|
65
77
|
```
|
|
66
78
|
|
|
67
|
-
Layers merge by ID: `<project>/.agents/` over `~/.agents/` over pinned remote [catalogs](./docs/documentation/catalogs.md). An [agent](./docs/documentation/agents.md) carries both its identity and its loadout — an [agent profile](./docs/documentation/profiles.md) — and is what you run; a [persona](./docs/documentation/personas.md) is a review convention layered on a base agent; a [subagent](./docs/documentation/subagents.md) is an agent a run delegates to,
|
|
68
|
-
|
|
69
|
-
Agents can also run headlessly in GitHub Actions via [`ai-outfitter/actions`](https://github.com/ai-outfitter/actions).
|
|
79
|
+
Layers merge by ID: `<project>/.agents/` over `~/.agents/` over pinned remote [catalogs](./docs/documentation/catalogs.md). An [agent](./docs/documentation/agents.md) carries both its identity and its loadout — an [agent profile](./docs/documentation/profiles.md) — and is what you run; a [persona](./docs/documentation/personas.md) is a review convention layered on a base agent; a [subagent](./docs/documentation/subagents.md) is an agent a run delegates to, across [four delegation boundaries](./docs/documentation/subagents.md#the-four-delegation-boundaries) from an in-session helper to a Kubernetes Job.
|
|
70
80
|
|
|
71
81
|
## Documentation
|
|
72
82
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- [
|
|
76
|
-
- [Agents](./docs/documentation/agents.md) · [
|
|
77
|
-
- [
|
|
78
|
-
- [
|
|
79
|
-
- [
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- [
|
|
84
|
-
- [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- [
|
|
89
|
-
- [
|
|
90
|
-
- [
|
|
83
|
+
The [documentation index](./docs/documentation/README.md) follows the same arc — set up your own, understand the pieces, share across your org, automate more surfaces, contribute back:
|
|
84
|
+
|
|
85
|
+
- **Start:** [Getting started](./docs/documentation/getting-started.md) · [First-time CLI agent users](./docs/documentation/first-time-cli-agent-users.md) · [Switching to Outfitter](./docs/documentation/switching-to-outfitter.md)
|
|
86
|
+
- **Understand:** [Concepts](./docs/documentation/concepts.md) · [Agents](./docs/documentation/agents.md) · [Skills](./docs/documentation/skills.md) · [Personas](./docs/documentation/personas.md) · [Subagents and delegation](./docs/documentation/subagents.md)
|
|
87
|
+
- **Share:** [Catalogs](./docs/documentation/catalogs.md) · [Conventions](./docs/documentation/conventions.md) · [Organization catalog](./docs/documentation/usecases/organization-profile-catalog.md) · [Best practices](./docs/documentation/best-practices.md)
|
|
88
|
+
- **Automate:** [GitHub Actions](./docs/documentation/actions.md) · [Recurring runs](./docs/documentation/recurring-runs.md) · [In-cluster agents](./docs/documentation/in-cluster.md) · [Hooks](./docs/documentation/hooks.md) · [State persistence](./docs/documentation/state.md)
|
|
89
|
+
- **Reference:** [CLI](./docs/documentation/cli.md) · [Settings](./docs/documentation/settings.md) · [Adapter support matrix](./docs/documentation/support-matrix.md) · [Philosophy](./docs/philosophy.md)
|
|
90
|
+
|
|
91
|
+
Use cases, story first:
|
|
92
|
+
|
|
93
|
+
- [Shared conventions without duplication](./docs/documentation/usecases/shared-conventions.md)
|
|
94
|
+
- [Flaky-test post-mortems in CI](./docs/documentation/usecases/flaky-test-postmortems.md)
|
|
95
|
+
- [Grafana alert investigations in-cluster](./docs/documentation/usecases/grafana-alert-investigator.md)
|
|
96
|
+
- [Self-improving skills](./docs/documentation/usecases/self-improving-skills.md)
|
|
97
|
+
- [Resident agents: a researcher wiki](./docs/documentation/usecases/resident-agents.md)
|
|
98
|
+
- [Persona reviews](./docs/documentation/usecases/persona-reviews.md)
|
|
99
|
+
- [Organization catalog](./docs/documentation/usecases/organization-profile-catalog.md)
|
|
100
|
+
- [Engineering catalog](./docs/documentation/usecases/engineering.md)
|
|
91
101
|
|
|
92
102
|
For local development, repository structure, and release workflow details, see [Contributing](./CONTRIBUTING.md).
|
|
93
103
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const { spawnSync } = require('node:child_process');
|
|
2
|
-
const {
|
|
2
|
+
const { join } = require('node:path');
|
|
3
3
|
|
|
4
4
|
const {
|
|
5
5
|
formatPrivateCatalogCliPrompt,
|
|
@@ -10,7 +10,7 @@ const {
|
|
|
10
10
|
const { enablePrivateProfileCatalogs, isPrivateProfileCatalogsEnabled } = require('./privateCatalogSettings.cjs');
|
|
11
11
|
|
|
12
12
|
const createPrivateCatalogGate = ({ homeDirectory, classifier, prompt }) => {
|
|
13
|
-
const settingsPath = join(homeDirectory, '.
|
|
13
|
+
const settingsPath = join(homeDirectory, '.agents', 'settings.yml');
|
|
14
14
|
|
|
15
15
|
return {
|
|
16
16
|
classifier,
|
|
@@ -50,7 +50,7 @@ const gatePrivateCatalogSources = (sources, gate, helpers) => {
|
|
|
50
50
|
}
|
|
51
51
|
skippedResults.push({
|
|
52
52
|
uri: helpers.formatDisplayUri(source),
|
|
53
|
-
cachePath: helpers.
|
|
53
|
+
cachePath: helpers.resolveCachePath(source),
|
|
54
54
|
status: 'skipped',
|
|
55
55
|
message: formatPrivateCatalogSkipResultMessage(repository),
|
|
56
56
|
});
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
import { VERSION as PI_VERSION } from '@earendil-works/pi-coding-agent';
|
|
1
2
|
import { Key, matchesKey, truncateToWidth, visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
|
|
2
3
|
|
|
4
|
+
const OUTFITTER_ACTIVE_PROFILE = '__OUTFITTER_ACTIVE_PROFILE__';
|
|
5
|
+
const OUTFITTER_VERSION = '__OUTFITTER_VERSION__';
|
|
6
|
+
|
|
3
7
|
// Outfitter runtime extension. Unlike the setup walkthrough extension
|
|
4
|
-
// (outfitter-extension.js), this file is loaded into the real profile pi session.
|
|
5
|
-
//
|
|
6
|
-
// no models available, it offers to connect one and delegates
|
|
7
|
-
// persists credentials in pi's own agent directory and selects
|
|
8
|
+
// (outfitter-extension.js), this file is loaded into the real profile pi session. It restores the
|
|
9
|
+
// Outfitter + pi header and active-profile status, plus the original "no provider connected yet"
|
|
10
|
+
// sign-in prompt: when pi starts with no models available, it offers to connect one and delegates
|
|
11
|
+
// to pi's native /login command, which persists credentials in pi's own agent directory and selects
|
|
12
|
+
// a default model in-session.
|
|
8
13
|
//
|
|
9
14
|
// The setup pi stays deliberately model-free and MUST NOT open /login (OFTR-010.1.4); that is why
|
|
10
|
-
// the auto-login lives here instead.
|
|
11
|
-
//
|
|
15
|
+
// the auto-login lives here instead. The CLI stamps profile and Outfitter-version metadata into a
|
|
16
|
+
// per-run copy before loading it via --extension. PI_VERSION comes from the running pi package.
|
|
12
17
|
|
|
13
18
|
export default function outfitterRuntime(pi) {
|
|
14
19
|
let loginSubmitted = false;
|
|
@@ -72,10 +77,44 @@ export default function outfitterRuntime(pi) {
|
|
|
72
77
|
|
|
73
78
|
pi.on('session_start', async (event, ctx) => {
|
|
74
79
|
if (ctx.mode !== 'tui') return;
|
|
80
|
+
setRuntimeHeader(ctx);
|
|
81
|
+
updateProfileStatus(ctx);
|
|
75
82
|
if (event.reason === 'startup') await openLoginIfNoModels(ctx);
|
|
76
83
|
});
|
|
77
84
|
}
|
|
78
85
|
|
|
86
|
+
const setRuntimeHeader = (ctx) => {
|
|
87
|
+
ctx.ui.setHeader((_tui, theme) => {
|
|
88
|
+
let cachedWidth;
|
|
89
|
+
let cachedLines;
|
|
90
|
+
return {
|
|
91
|
+
render: (width) => {
|
|
92
|
+
const maxWidth = typeof width === 'number' && width > 0 ? width : 120;
|
|
93
|
+
if (cachedLines === undefined || cachedWidth !== maxWidth) {
|
|
94
|
+
const line =
|
|
95
|
+
theme.bold(theme.fg('accent', 'Outfitter')) + theme.fg('dim', ` v${OUTFITTER_VERSION} + pi v${PI_VERSION}`);
|
|
96
|
+
cachedLines = [visibleWidth(line) > maxWidth ? truncateToWidth(line, maxWidth) : line];
|
|
97
|
+
cachedWidth = maxWidth;
|
|
98
|
+
}
|
|
99
|
+
return cachedLines;
|
|
100
|
+
},
|
|
101
|
+
invalidate: () => {
|
|
102
|
+
cachedWidth = undefined;
|
|
103
|
+
cachedLines = undefined;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const updateProfileStatus = (ctx) => {
|
|
110
|
+
// Stays a string when the source asset is loaded without Outfitter stamping and is undefined
|
|
111
|
+
// when a caller intentionally attaches the extension without a resolved profile.
|
|
112
|
+
if (typeof OUTFITTER_ACTIVE_PROFILE !== 'object' || OUTFITTER_ACTIVE_PROFILE === null) return;
|
|
113
|
+
const name = OUTFITTER_ACTIVE_PROFILE.label ?? OUTFITTER_ACTIVE_PROFILE.id;
|
|
114
|
+
if (!name) return;
|
|
115
|
+
ctx.ui.setStatus('outfitter-profile', ctx.ui.theme.fg('muted', 'profile: ' + name));
|
|
116
|
+
};
|
|
117
|
+
|
|
79
118
|
// Renders a described-option picker identical to the setup walkthrough's, so the runtime sign-in
|
|
80
119
|
// prompt matches the rest of the Outfitter UI. Falls back to a plain label list when pi does not
|
|
81
120
|
// support custom UI, then resolves the chosen label back to its item value.
|
package/dist/cli/OutfitterCli.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
// Assembles the top-level Outfitter Commander program from command objects.
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
2
|
import { Command } from 'commander';
|
|
3
|
+
import { readOutfitterVersion } from '../version/OutfitterVersion.js';
|
|
4
4
|
import { createDumpCommand } from './commands/DumpCommand.js';
|
|
5
5
|
import { createListCommand } from './commands/ListCommand.js';
|
|
6
6
|
import { createRunAgentCommand } from './commands/RunAgentCommand.js';
|
|
7
7
|
import { createSetupCommand } from './commands/SetupCommand.js';
|
|
8
|
+
import { createSyncCommand } from './commands/SyncCommand.js';
|
|
8
9
|
import { createValidateCommand } from './commands/ValidateCommand.js';
|
|
9
10
|
export const createDefaultCommands = () => [
|
|
10
11
|
createRunAgentCommand(),
|
|
11
12
|
createSetupCommand(),
|
|
13
|
+
createSyncCommand(),
|
|
12
14
|
createListCommand(),
|
|
13
15
|
createValidateCommand(),
|
|
14
16
|
createDumpCommand(),
|
|
@@ -18,15 +20,10 @@ export const createOutfitterProgram = (commands = createDefaultCommands()) => {
|
|
|
18
20
|
program
|
|
19
21
|
.name('outfitter')
|
|
20
22
|
.description('Resolve, compose, and launch .agents agents in pi, Claude Code, and future harnesses.')
|
|
21
|
-
.version(
|
|
23
|
+
.version(readOutfitterVersion());
|
|
22
24
|
for (const command of commands) {
|
|
23
25
|
command.register(program);
|
|
24
26
|
}
|
|
25
27
|
return program;
|
|
26
28
|
};
|
|
27
|
-
const readPackageVersion = () => {
|
|
28
|
-
const packageJsonPath = new URL('../../package.json', import.meta.url);
|
|
29
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
30
|
-
return packageJson.version;
|
|
31
|
-
};
|
|
32
29
|
//# sourceMappingURL=OutfitterCli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutfitterCli.js","sourceRoot":"","sources":["../../src/cli/OutfitterCli.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"OutfitterCli.js","sourceRoot":"","sources":["../../src/cli/OutfitterCli.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE,CAAC;IAC1D,qBAAqB,EAAE;IACvB,kBAAkB,EAAE;IACpB,iBAAiB,EAAE;IACnB,iBAAiB,EAAE;IACnB,qBAAqB,EAAE;IACvB,iBAAiB,EAAE;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,WAAqC,qBAAqB,EAAE,EAAW,EAAE;IAC9G,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,uFAAuF,CAAC;SACpG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -13,16 +13,21 @@ const resolveAgentSlug = (settings, requested) => {
|
|
|
13
13
|
return settings.defaultAgent;
|
|
14
14
|
};
|
|
15
15
|
export const executeDumpCommand = (input) => {
|
|
16
|
-
const { set, settings, settingsIssues } = resolveEffectiveSet(input);
|
|
16
|
+
const { set, settings, settingsIssues, warnings } = resolveEffectiveSet(input);
|
|
17
17
|
if (settingsIssues.length > 0) {
|
|
18
18
|
throw new Error(`Cannot dump with invalid settings: ${settingsIssues.map((issue) => issue.message).join('; ')}`);
|
|
19
19
|
}
|
|
20
|
+
const syncWarnings = warnings.map((warning) => `warning: ${warning}`);
|
|
20
21
|
const agentSlug = resolveAgentSlug(settings, input.agent);
|
|
21
22
|
const result = dumpAgent(set, agentSlug, input.out);
|
|
22
23
|
const ok = result.errors.length === 0;
|
|
23
24
|
const messages = ok
|
|
24
|
-
? [
|
|
25
|
-
|
|
25
|
+
? [
|
|
26
|
+
...syncWarnings,
|
|
27
|
+
`Dumped '${agentSlug}' to ${input.out} (${result.writtenPaths.length} files).`,
|
|
28
|
+
...result.warnings,
|
|
29
|
+
]
|
|
30
|
+
: [...syncWarnings, ...result.errors, ...result.warnings];
|
|
26
31
|
return { writtenPaths: result.writtenPaths, messages, ok };
|
|
27
32
|
};
|
|
28
33
|
export const createDumpCommand = (dependencies = {}) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DumpCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/DumpCommand.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAqBrF,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAE,SAA6B,EAAU,EAAE;IACrF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAqB,EAAE;IACxE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DumpCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/DumpCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { agentLocalKinds, compareSlugs, findResource, listAgentResources, listResources, resourceKinds, } from '../../resolver/Resource.js';
|
|
4
4
|
import { resolveEffectiveSet } from '../../resolver/ResolverContext.js';
|
|
5
|
+
import { formatSettingsIssue } from '../../settings/SettingsLoader.js';
|
|
5
6
|
import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
|
|
6
7
|
const kindByPlural = new Map([
|
|
7
8
|
['agents', 'agent'],
|
|
@@ -26,12 +27,12 @@ const resolveKindFilter = (kind) => {
|
|
|
26
27
|
return [resolved];
|
|
27
28
|
};
|
|
28
29
|
export const executeListCommand = (input) => {
|
|
29
|
-
const { set, settingsIssues } = resolveEffectiveSet(input);
|
|
30
|
+
const { set, settingsIssues, warnings } = resolveEffectiveSet(input);
|
|
30
31
|
if (settingsIssues.length > 0) {
|
|
31
|
-
const detail = settingsIssues.map(
|
|
32
|
+
const detail = settingsIssues.map(formatSettingsIssue).join('; ');
|
|
32
33
|
throw new Error(`Cannot list resources with invalid settings: ${detail}`);
|
|
33
34
|
}
|
|
34
|
-
const messages =
|
|
35
|
+
const messages = warnings.map((warning) => `warning: ${warning}`);
|
|
35
36
|
if (input.agent !== undefined && findResource(set, 'agent', input.agent) === undefined) {
|
|
36
37
|
throw new Error(`Unknown agent '${input.agent}'. Run 'outfitter list agents' to see resolvable agents.`);
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ListCommand.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"ListCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ListCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import type { AgentLaunchPlan } from '../../projection/Projection.js';
|
|
2
|
+
export interface PiRuntimeProfileIdentity {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly label?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PiRuntimeExtensionInput {
|
|
7
|
+
readonly outfitterVersion: string;
|
|
8
|
+
readonly profile?: PiRuntimeProfileIdentity;
|
|
9
|
+
readonly rootDirectory: string;
|
|
10
|
+
}
|
|
2
11
|
export declare const isNonInteractivePiLaunch: (args: readonly string[]) => boolean;
|
|
12
|
+
/** Stamps per-run identity metadata into the runtime extension source. */
|
|
13
|
+
export declare const createPiRuntimeExtensionContent: (input: Omit<PiRuntimeExtensionInput, "rootDirectory">) => string;
|
|
3
14
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* run. Non-pi and non-interactive launches are returned unchanged.
|
|
15
|
+
* Materializes and prepends `--extension <runtime>` to an interactive pi launch. Non-pi and
|
|
16
|
+
* non-interactive launches are returned unchanged.
|
|
7
17
|
*/
|
|
8
|
-
export declare const attachPiRuntimeExtension: (plan: AgentLaunchPlan) => AgentLaunchPlan;
|
|
18
|
+
export declare const attachPiRuntimeExtension: (plan: AgentLaunchPlan, input: PiRuntimeExtensionInput) => AgentLaunchPlan;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// Attaches the Outfitter runtime pi extension to interactive profile launches. The extension
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
// Attaches the Outfitter runtime pi extension to interactive profile launches. The extension owns
|
|
2
|
+
// the Outfitter + pi header, active-profile status, and "connect a model provider" sign-in prompt.
|
|
3
|
+
// Non-interactive pi launches (--print, --export, --mode json|print|rpc, …) are left untouched so
|
|
4
|
+
// scripted runs never prompt, and non-pi harnesses pass through unchanged.
|
|
5
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { findRepositoryCodeAsset } from '../../paths/RepositoryAssets.js';
|
|
8
8
|
const nonInteractivePiLaunchFlags = new Set(['--print', '-p', '--export', '--list-models']);
|
|
9
9
|
const nonInteractivePiModes = new Set(['json', 'print', 'rpc']);
|
|
10
10
|
const runtimeExtensionAsset = 'pi-extension/src/outfitter-runtime-extension.js';
|
|
@@ -17,31 +17,27 @@ export const isNonInteractivePiLaunch = (args) => args.some((arg, index) => {
|
|
|
17
17
|
return nonInteractivePiModes.has(arg.slice('--mode='.length));
|
|
18
18
|
return false;
|
|
19
19
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (existsSync(packagePath))
|
|
30
|
-
return packagePath;
|
|
31
|
-
return undefined;
|
|
20
|
+
/** Stamps per-run identity metadata into the runtime extension source. */
|
|
21
|
+
export const createPiRuntimeExtensionContent = (input) => {
|
|
22
|
+
const extensionPath = findRepositoryCodeAsset(runtimeExtensionAsset);
|
|
23
|
+
/* v8 ignore next -- defensive: the runtime extension ships with the package, so it resolves in practice. */
|
|
24
|
+
if (extensionPath === undefined)
|
|
25
|
+
throw new Error('Outfitter runtime extension was not found.');
|
|
26
|
+
return readFileSync(extensionPath, 'utf8')
|
|
27
|
+
.replace(/["']__OUTFITTER_VERSION__["']/gu, JSON.stringify(input.outfitterVersion))
|
|
28
|
+
.replace(/["']__OUTFITTER_ACTIVE_PROFILE__["']/gu, JSON.stringify(input.profile) ?? 'undefined');
|
|
32
29
|
};
|
|
33
30
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* run. Non-pi and non-interactive launches are returned unchanged.
|
|
31
|
+
* Materializes and prepends `--extension <runtime>` to an interactive pi launch. Non-pi and
|
|
32
|
+
* non-interactive launches are returned unchanged.
|
|
37
33
|
*/
|
|
38
|
-
export const attachPiRuntimeExtension = (plan) => {
|
|
34
|
+
export const attachPiRuntimeExtension = (plan, input) => {
|
|
39
35
|
if (plan.command !== 'pi' || isNonInteractivePiLaunch(plan.args))
|
|
40
36
|
return plan;
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
const extensionDirectory = join(input.rootDirectory, '.outfitter');
|
|
38
|
+
const extensionPath = join(extensionDirectory, 'outfitter-runtime-extension.js');
|
|
39
|
+
mkdirSync(extensionDirectory, { recursive: true });
|
|
40
|
+
writeFileSync(extensionPath, createPiRuntimeExtensionContent(input));
|
|
45
41
|
return { ...plan, args: ['--extension', extensionPath, ...plan.args] };
|
|
46
42
|
};
|
|
47
43
|
//# sourceMappingURL=PiRuntimeLaunch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PiRuntimeLaunch.js","sourceRoot":"","sources":["../../../src/cli/commands/PiRuntimeLaunch.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"PiRuntimeLaunch.js","sourceRoot":"","sources":["../../../src/cli/commands/PiRuntimeLaunch.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mGAAmG;AACnG,kGAAkG;AAClG,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;AAC5F,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhE,MAAM,qBAAqB,GAAG,iDAAiD,CAAC;AAahF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAuB,EAAW,EAAE,CAC3E,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACvB,IAAI,2BAA2B,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC;AAEL,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,KAAqD,EAAU,EAAE;IAC/G,MAAM,aAAa,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,CAAC;IACrE,4GAA4G;IAC5G,IAAI,aAAa,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAE/F,OAAO,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;SACvC,OAAO,CAAC,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;SAClF,OAAO,CAAC,wCAAwC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAqB,EAAE,KAA8B,EAAmB,EAAE;IACjH,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9E,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,CAAC;IACjF,SAAS,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,aAAa,CAAC,aAAa,EAAE,+BAA+B,CAAC,KAAK,CAAC,CAAC,CAAC;IAErE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,CAAC,CAAC"}
|
|
@@ -12,6 +12,7 @@ import { projectComposition } from '../../projection/ProjectHarness.js';
|
|
|
12
12
|
import { findResource } from '../../resolver/Resource.js';
|
|
13
13
|
import { resolveEffectiveSet } from '../../resolver/ResolverContext.js';
|
|
14
14
|
import { HARNESSES } from '../../settings/Settings.js';
|
|
15
|
+
import { readOutfitterVersion } from '../../version/OutfitterVersion.js';
|
|
15
16
|
import { attachPiRuntimeExtension } from './PiRuntimeLaunch.js';
|
|
16
17
|
import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
|
|
17
18
|
import { runSetup } from './SetupCommand.js';
|
|
@@ -68,6 +69,7 @@ export const executeRunAgentCommand = async (input) => {
|
|
|
68
69
|
};
|
|
69
70
|
let resolved = resolveEffectiveSet(input);
|
|
70
71
|
assertNoSettingsIssues(resolved.settingsIssues);
|
|
72
|
+
emit(resolved.warnings.map((warning) => `warning: ${warning}`));
|
|
71
73
|
// First run: nothing selected and no default configured — onboard, then resolve again.
|
|
72
74
|
const setupMessages = [];
|
|
73
75
|
if (input.agent === undefined && resolved.settings.defaultAgent === undefined && input.setup !== undefined) {
|
|
@@ -123,9 +125,12 @@ export const executeRunAgentCommand = async (input) => {
|
|
|
123
125
|
// Emit setup notices and warnings before launch so they precede the pi session on the terminal.
|
|
124
126
|
const messages = [...setupMessages, ...warnings];
|
|
125
127
|
emit(messages);
|
|
126
|
-
// Attach the Outfitter runtime extension
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
// Attach the Outfitter runtime UI and sign-in extension to interactive pi sessions.
|
|
129
|
+
const launch = attachPiRuntimeExtension(projection.launch, {
|
|
130
|
+
outfitterVersion: readOutfitterVersion(),
|
|
131
|
+
profile: { id: agentSlug, label: composed.plan.identity.label },
|
|
132
|
+
rootDirectory,
|
|
133
|
+
});
|
|
129
134
|
const exitCode = await launchWithCredentialPersistence(input, harness, rootDirectory, launch);
|
|
130
135
|
return { launchPlan: launch, exitCode, messages };
|
|
131
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunAgentCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/RunAgentCommand.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"RunAgentCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/RunAgentCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export type SetupProcessLauncher = (plan: AgentLaunchPlan) => Promise<number>;
|
|
|
5
5
|
export interface SetupCommandDependencies {
|
|
6
6
|
readonly homeDirectory?: string;
|
|
7
7
|
readonly projectDirectory?: string;
|
|
8
|
-
readonly defaultCatalogBootstrap?: (homeDirectory: string) => string;
|
|
8
|
+
readonly defaultCatalogBootstrap?: (homeDirectory: string, cacheDirectory?: string) => string;
|
|
9
9
|
readonly setupSourceUri?: string;
|
|
10
10
|
readonly interactive?: boolean;
|
|
11
11
|
readonly launcher?: SetupProcessLauncher;
|
|
@@ -3,25 +3,15 @@
|
|
|
3
3
|
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { tmpdir } from 'node:os';
|
|
5
5
|
import { join, resolve } from 'node:path';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
7
6
|
import { Command } from 'commander';
|
|
8
7
|
import { launchThroughSpawn, spawnLauncher } from '../../agents/AgentLaunch.js';
|
|
8
|
+
import { readRepositoryCodeAsset } from '../../paths/RepositoryAssets.js';
|
|
9
9
|
import { HARNESSES } from '../../settings/Settings.js';
|
|
10
|
+
import { discoverSettingsLoadPlan, loadSettings } from '../../settings/SettingsLoader.js';
|
|
10
11
|
import { applySetupSelection, discoverSetupAgentChoices } from '../../setup/Setup.js';
|
|
11
12
|
import { bootstrapDefaultCatalog } from '../../setup/DefaultCatalog.js';
|
|
12
13
|
import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
|
|
13
14
|
import { executeRunAgentCommand } from './RunAgentCommand.js';
|
|
14
|
-
const readRepositoryCodeAsset = (relativePath) => {
|
|
15
|
-
const sourcePath = fileURLToPath(new URL(`../../../../${relativePath}`, import.meta.url));
|
|
16
|
-
const packagePath = fileURLToPath(new URL(`../../../code/${relativePath}`, import.meta.url));
|
|
17
|
-
/* v8 ignore else -- packaged layout is exercised by the npm package smoke test. */
|
|
18
|
-
if (existsSync(sourcePath))
|
|
19
|
-
return readFileSync(sourcePath, 'utf8');
|
|
20
|
-
/* v8 ignore next 3 -- packaged layout is covered by the package smoke test. */
|
|
21
|
-
if (existsSync(packagePath))
|
|
22
|
-
return readFileSync(packagePath, 'utf8');
|
|
23
|
-
throw new Error(`Outfitter support file '${relativePath}' was not found.`);
|
|
24
|
-
};
|
|
25
15
|
export const createPiSetupExtensionContent = (input) => {
|
|
26
16
|
const values = {
|
|
27
17
|
OUTFITTER_HOME: input.homeDirectory,
|
|
@@ -133,8 +123,11 @@ export const runSetup = async (dependencies = {}) => {
|
|
|
133
123
|
return undefined;
|
|
134
124
|
const homeDirectory = resolveHomeDirectory(dependencies.homeDirectory);
|
|
135
125
|
const projectDirectory = resolve(resolveProjectDirectory(dependencies.projectDirectory));
|
|
126
|
+
const localSettings = loadSettings(discoverSettingsLoadPlan({ homeDirectory, projectDirectory }));
|
|
127
|
+
const bootstrap = dependencies.defaultCatalogBootstrap ??
|
|
128
|
+
((home, cacheDirectory) => bootstrapDefaultCatalog(home, cacheDirectory).root);
|
|
136
129
|
const defaultCatalogRoot = dependencies.setupSourceUri === undefined
|
|
137
|
-
? (
|
|
130
|
+
? bootstrap(homeDirectory, localSettings.settings.cacheDirectory)
|
|
138
131
|
: undefined;
|
|
139
132
|
const availableAgents = discoverSetupAgentChoices({ defaultCatalogRoot });
|
|
140
133
|
const setupDirectory = mkdtempSync(join(tmpdir(), 'outfitter-setup-'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SetupCommand.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,mEAAmE;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"SetupCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SetupCommand.ts"],"names":[],"mappings":"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"}
|