@ai-outfitter/outfitter 0.6.1 → 0.7.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.md +20 -50
- package/README.md +41 -280
- package/code/enterprise/LICENSE +35 -0
- package/code/enterprise/README.md +7 -0
- package/code/enterprise/cli/privateCatalogGate.cjs +134 -0
- package/code/enterprise/cli/privateCatalogSettings.cjs +59 -0
- package/code/enterprise/pi-extension/privateCatalogOnboarding.js +89 -0
- package/code/enterprise/private-catalog-boundary.json +9 -0
- package/code/enterprise/privateCatalog.js +24 -0
- package/code/enterprise/shared/privateCatalogPolicy.cjs +66 -0
- package/dist/agents/AdapterProfileControls.d.ts +2 -2
- package/dist/agents/AdapterProfileControls.js +8 -1
- package/dist/agents/AdapterProfileControls.js.map +1 -1
- package/dist/agents/AgentAdapter.d.ts +11 -0
- package/dist/agents/AgentLaunch.d.ts +6 -0
- package/dist/agents/AgentLaunch.js +89 -0
- package/dist/agents/AgentLaunch.js.map +1 -0
- package/dist/agents/claude/ClaudeAdapter.js +18 -3
- package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
- package/dist/agents/pi/PiAdapter.js +162 -33
- package/dist/agents/pi/PiAdapter.js.map +1 -1
- package/dist/agents/pi/PiArgs.d.ts +2 -0
- package/dist/agents/pi/PiArgs.js +15 -0
- package/dist/agents/pi/PiArgs.js.map +1 -0
- package/dist/agents/pi/PiExtensionCache.d.ts +4 -0
- package/dist/agents/pi/PiExtensionCache.js +105 -0
- package/dist/agents/pi/PiExtensionCache.js.map +1 -0
- package/dist/cli/commands/PiLoginLaunch.d.ts +9 -2
- package/dist/cli/commands/PiLoginLaunch.js +817 -75
- package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
- package/dist/cli/commands/RunCommand.d.ts +22 -3
- package/dist/cli/commands/RunCommand.js +104 -20
- package/dist/cli/commands/RunCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +19 -2
- package/dist/cli/commands/SetupCommand.js +281 -57
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/SyncCommand.d.ts +19 -1
- package/dist/cli/commands/SyncCommand.js +47 -6
- package/dist/cli/commands/SyncCommand.js.map +1 -1
- package/dist/cli/commands/WelcomeCommand.js +1 -1
- package/dist/cli/commands/WelcomeCommand.js.map +1 -1
- package/dist/cli/commands/assets/outfitter-ascii.txt +5 -0
- package/dist/cli/commands/profile/Command.d.ts +1 -0
- package/dist/cli/commands/profile/Command.js +3 -0
- package/dist/cli/commands/profile/Command.js.map +1 -1
- package/dist/cli/commands/profile/LintCommand.d.ts +19 -0
- package/dist/cli/commands/profile/LintCommand.js +123 -0
- package/dist/cli/commands/profile/LintCommand.js.map +1 -0
- package/dist/cli.js +8 -2
- package/dist/cli.js.map +1 -1
- package/dist/merge/ArrayMergePolicy.js.map +1 -1
- package/dist/merge/SettingsValueMerger.js.map +1 -1
- package/dist/profiles/Profile.d.ts +13 -1
- package/dist/profiles/Profile.js.map +1 -1
- package/dist/profiles/ProfileLoader.d.ts +4 -0
- package/dist/profiles/ProfileLoader.js +117 -17
- package/dist/profiles/ProfileLoader.js.map +1 -1
- package/dist/profiles/ProfileMerger.js +3 -0
- package/dist/profiles/ProfileMerger.js.map +1 -1
- package/dist/profiles/PromptIncludes.d.ts +32 -0
- package/dist/profiles/PromptIncludes.js +147 -0
- package/dist/profiles/PromptIncludes.js.map +1 -0
- package/dist/prompts/SystemPromptExport.d.ts +16 -0
- package/dist/prompts/SystemPromptExport.js +81 -0
- package/dist/prompts/SystemPromptExport.js.map +1 -0
- package/dist/schemas/profile.schema.json +37 -2
- package/dist/schemas/settings.schema.json +23 -0
- package/dist/settings/Settings.d.ts +9 -0
- package/dist/settings/Settings.js.map +1 -1
- package/dist/settings/SettingsLoader.js +5 -0
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/settings/SettingsMerger.js +11 -0
- package/dist/settings/SettingsMerger.js.map +1 -1
- package/package.json +7 -11
- package/src/schemas/profile.schema.json +37 -2
- package/src/schemas/settings.schema.json +23 -0
- package/doc/.deepreview +0 -30
- package/doc/architecture.md +0 -856
- package/doc/controllable-elements.md +0 -162
- package/doc/file_structure.md +0 -141
- package/doc/integration_test_system.md +0 -214
- package/doc/specs/validating_requirements_with_rules.md +0 -55
- package/doc/state_writeback_strategy.md +0 -342
- package/requirements/OFTR-001-project-foundation.md +0 -53
- package/requirements/OFTR-002-settings.md +0 -65
- package/requirements/OFTR-003-profiles.md +0 -60
- package/requirements/OFTR-004-sync-and-setup.md +0 -67
- package/requirements/OFTR-005-run-and-composite-profile.md +0 -60
- package/requirements/OFTR-006-agent-adapters.md +0 -66
- package/requirements/OFTR-007-controllable-elements.md +0 -32
- package/requirements/OFTR-008-requirements-governance.md +0 -42
- package/requirements/OFTR-009-release-publishing.md +0 -35
- package/requirements/OFTR-010-onboarding-welcome.md +0 -48
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Prepares opt-in generated Pi system prompt snapshots next to the selected profile.
|
|
2
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
|
+
import { mergeAgentSpecificControls } from '../agents/AdapterProfileControls.js';
|
|
5
|
+
import { normalizeAppendSystemPromptEntries } from '../profiles/PromptIncludes.js';
|
|
6
|
+
/* v8 ignore start -- rare skip/error branches are defensive around external profile ownership; main export behavior is unit covered. */
|
|
7
|
+
export const exportSystemPromptIfEnabled = (input) => {
|
|
8
|
+
if (!isSystemPromptExportEnabled(input.profile, input.settings)) {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
const owner = findSelectedProfileOwner(input.profile, input.profileLayers);
|
|
12
|
+
if (owner === undefined) {
|
|
13
|
+
input.warn(`System prompt export skipped for profile '${input.profile.id}' because no source profile was found.`);
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
if (isCacheBackedProfile(owner, input.cacheDirectory)) {
|
|
17
|
+
input.warn(`System prompt export skipped for profile '${input.profile.id}' because its source is cache-backed. ` +
|
|
18
|
+
'Copy or symlink the profile into a local profile source to export generated prompts.');
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
const outputPath = resolveSystemPromptExportPath(input.profile, owner);
|
|
22
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
23
|
+
writeFileSync(outputPath, renderGeneratedSystemPrompt(input.profile));
|
|
24
|
+
return { outputPath };
|
|
25
|
+
};
|
|
26
|
+
/* v8 ignore stop */
|
|
27
|
+
/* v8 ignore next -- fallback precedence is schema-level behavior; enabled/disabled outcomes are covered. */
|
|
28
|
+
export const isSystemPromptExportEnabled = (profile, settings) => profile.profileExport ?? settings.profileExport ?? false;
|
|
29
|
+
export const renderGeneratedSystemPrompt = (profile) => {
|
|
30
|
+
const controls = mergeAgentSpecificControls(profile.controls, 'pi');
|
|
31
|
+
const appendPrompts = normalizeAppendSystemPrompt(controls.appendSystemPrompt);
|
|
32
|
+
return [
|
|
33
|
+
'<!-- Generated by Outfitter before Pi runtime capture. The Pi launch extension overwrites this with ctx.getSystemPrompt(). -->',
|
|
34
|
+
'# Generated Pi prompt fallback',
|
|
35
|
+
'',
|
|
36
|
+
`Profile: ${profile.id}`,
|
|
37
|
+
'Prompt source: Pi launch controls',
|
|
38
|
+
'',
|
|
39
|
+
'## system_prompt',
|
|
40
|
+
'',
|
|
41
|
+
controls.systemPrompt ?? '(none)',
|
|
42
|
+
'',
|
|
43
|
+
...appendPrompts.flatMap((prompt, index) => [`## append_system_prompt[${index}]`, '', prompt, '']),
|
|
44
|
+
...(appendPrompts.length === 0 ? ['## append_system_prompt', '', '(none)', ''] : []),
|
|
45
|
+
].join('\n');
|
|
46
|
+
};
|
|
47
|
+
const normalizeAppendSystemPrompt = (value) => {
|
|
48
|
+
if (value === undefined) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
return (normalizeAppendSystemPromptEntries(value) ?? []).filter((entry) => typeof entry === 'string');
|
|
52
|
+
};
|
|
53
|
+
const findSelectedProfileOwner = (profile, profileLayers) => profileLayers.filter((layer) => layer.profile.id === profile.id).at(-1);
|
|
54
|
+
const resolveSystemPromptExportPath = (profile, owner) => {
|
|
55
|
+
const root = owner.resourceRootPath ?? dirname(owner.profilePath);
|
|
56
|
+
const outputPath = owner.layout === 'flat-file'
|
|
57
|
+
? join(root, `${profile.id}.generated-system-prompt.md`)
|
|
58
|
+
: join(root, 'generated-system-prompt.md');
|
|
59
|
+
return assertInsideRoot(root, outputPath);
|
|
60
|
+
};
|
|
61
|
+
/* v8 ignore start -- path escape protection is defensive; normal generated output path behavior is unit covered. */
|
|
62
|
+
const assertInsideRoot = (root, path) => {
|
|
63
|
+
const resolvedRoot = resolve(root);
|
|
64
|
+
const resolvedPath = resolve(path);
|
|
65
|
+
const relativePath = relative(resolvedRoot, resolvedPath);
|
|
66
|
+
if (relativePath === '' || !isRelativePathInsideRoot(relativePath)) {
|
|
67
|
+
throw new Error(`System prompt export path '${resolvedPath}' must stay inside profile root '${resolvedRoot}'.`);
|
|
68
|
+
}
|
|
69
|
+
return resolvedPath;
|
|
70
|
+
};
|
|
71
|
+
const isRelativePathInsideRoot = (relativePath) => relativePath !== '..' && !relativePath.startsWith(`..${sep}`) && !isAbsolute(relativePath);
|
|
72
|
+
/* v8 ignore stop */
|
|
73
|
+
const isCacheBackedProfile = (owner, cacheDirectory) => {
|
|
74
|
+
/* v8 ignore next -- remote-source ownership is a defensive skip path for generated prompt export. */
|
|
75
|
+
if (owner.source.uri !== undefined || owner.source.github !== undefined) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
const relativePath = relative(resolve(cacheDirectory), resolve(owner.profilePath));
|
|
79
|
+
return relativePath !== '' && isRelativePathInsideRoot(relativePath);
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=SystemPromptExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemPromptExport.js","sourceRoot":"","sources":["../../src/prompts/SystemPromptExport.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"pattern": "^[a-z0-9][a-z0-9._-]*[a-z0-9]$|^[a-z0-9]$"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
+
"profile_export": { "type": "boolean" },
|
|
21
22
|
"state_persistence": {
|
|
22
23
|
"type": "object",
|
|
23
24
|
"additionalProperties": {
|
|
@@ -50,6 +51,19 @@
|
|
|
50
51
|
"type": "object",
|
|
51
52
|
"additionalProperties": { "type": "string" }
|
|
52
53
|
},
|
|
54
|
+
"deepwork": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": {
|
|
57
|
+
"jobs": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"items": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"pattern": "^[a-z][a-z0-9_]*$"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"additionalProperties": true
|
|
66
|
+
},
|
|
53
67
|
"pi": {
|
|
54
68
|
"type": "object",
|
|
55
69
|
"properties": {
|
|
@@ -115,12 +129,33 @@
|
|
|
115
129
|
},
|
|
116
130
|
"additionalProperties": true,
|
|
117
131
|
"$defs": {
|
|
118
|
-
"
|
|
132
|
+
"appendSystemPromptEntry": {
|
|
119
133
|
"oneOf": [
|
|
120
134
|
{ "type": "string" },
|
|
135
|
+
{
|
|
136
|
+
"type": "object",
|
|
137
|
+
"required": ["file"],
|
|
138
|
+
"properties": {
|
|
139
|
+
"file": { "type": "string" }
|
|
140
|
+
},
|
|
141
|
+
"additionalProperties": false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "object",
|
|
145
|
+
"required": ["repo_file"],
|
|
146
|
+
"properties": {
|
|
147
|
+
"repo_file": { "type": "string" }
|
|
148
|
+
},
|
|
149
|
+
"additionalProperties": false
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
"appendSystemPrompt": {
|
|
154
|
+
"oneOf": [
|
|
155
|
+
{ "$ref": "#/$defs/appendSystemPromptEntry" },
|
|
121
156
|
{
|
|
122
157
|
"type": "array",
|
|
123
|
-
"items": { "
|
|
158
|
+
"items": { "$ref": "#/$defs/appendSystemPromptEntry" }
|
|
124
159
|
}
|
|
125
160
|
]
|
|
126
161
|
}
|
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
"default_profile": { "type": "string", "minLength": 1 },
|
|
8
8
|
"default_agent": { "enum": ["pi", "claude"] },
|
|
9
9
|
"cache_directory": { "type": "string", "minLength": 1 },
|
|
10
|
+
"profile_export": { "type": "boolean" },
|
|
11
|
+
"startup": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"description": "Controls Outfitter startup presentation inside launched agents.",
|
|
14
|
+
"properties": {
|
|
15
|
+
"ascii_art": {
|
|
16
|
+
"type": "boolean",
|
|
17
|
+
"description": "Show the Outfitter ASCII/brand header on Pi startup. Defaults to true."
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": false
|
|
21
|
+
},
|
|
22
|
+
"enterprise": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"description": "Enterprise governance settings. User-home ~/.outfitter/settings.yml is the source of truth for these controls.",
|
|
25
|
+
"properties": {
|
|
26
|
+
"private_profile_catalogs": {
|
|
27
|
+
"type": "boolean",
|
|
28
|
+
"description": "Enable confirmed-private GitHub profile catalogs after reviewing the Outfitter Enterprise license or enterprise agreement."
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"additionalProperties": false
|
|
32
|
+
},
|
|
10
33
|
"profile_sources": {
|
|
11
34
|
"type": "array",
|
|
12
35
|
"items": { "$ref": "profile-source.schema.json" }
|
|
@@ -6,6 +6,12 @@ export type SettingsValue = string | number | boolean | null | readonly Settings
|
|
|
6
6
|
readonly [key: string]: SettingsValue;
|
|
7
7
|
};
|
|
8
8
|
export type CustomSettings = Readonly<Record<string, SettingsValue>>;
|
|
9
|
+
export interface StartupSettings {
|
|
10
|
+
readonly asciiArt?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface EnterpriseSettings {
|
|
13
|
+
readonly privateProfileCatalogs?: boolean;
|
|
14
|
+
}
|
|
9
15
|
export interface Settings {
|
|
10
16
|
readonly defaultProfile?: string;
|
|
11
17
|
readonly defaultAgent?: string;
|
|
@@ -13,5 +19,8 @@ export interface Settings {
|
|
|
13
19
|
readonly remoteSettings?: readonly RemoteSettingsReference[];
|
|
14
20
|
readonly cacheDirectory?: string;
|
|
15
21
|
readonly customSettings?: CustomSettings;
|
|
22
|
+
readonly profileExport?: boolean;
|
|
23
|
+
readonly startup?: StartupSettings;
|
|
24
|
+
readonly enterprise?: EnterpriseSettings;
|
|
16
25
|
}
|
|
17
26
|
export declare const emptySettings: () => Settings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/settings/Settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/settings/Settings.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,MAAM,aAAa,GAAG,GAAa,EAAE,CAAC,CAAC;IAC5C,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE;CACnB,CAAC,CAAC"}
|
|
@@ -99,7 +99,12 @@ const convertSettingsDocument = (document, settingsDirectory) => ({
|
|
|
99
99
|
? undefined
|
|
100
100
|
: resolveConfigDirectory(document.cache_directory, settingsDirectory),
|
|
101
101
|
customSettings: document.custom_settings,
|
|
102
|
+
profileExport: document.profile_export,
|
|
103
|
+
startup: convertStartupSettings(document.startup),
|
|
104
|
+
enterprise: convertEnterpriseSettings(document.enterprise),
|
|
102
105
|
});
|
|
106
|
+
const convertStartupSettings = (startup) => startup === undefined ? undefined : { asciiArt: startup.ascii_art };
|
|
107
|
+
const convertEnterpriseSettings = (enterprise) => enterprise === undefined ? undefined : { privateProfileCatalogs: enterprise.private_profile_catalogs };
|
|
103
108
|
const convertRemoteSettingsSource = (source) => {
|
|
104
109
|
if (source.uri !== undefined) {
|
|
105
110
|
return { uri: source.uri, ref: source.ref, path: source.path };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLoader.js","sourceRoot":"","sources":["../../src/settings/SettingsLoader.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG9G,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsLoader.js","sourceRoot":"","sources":["../../src/settings/SettingsLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable complexity */
|
|
1
2
|
// Provides deterministic Settings merge scaffolding.
|
|
2
3
|
import { mergeObjectsWithPolicy } from '../merge/SettingsValueMerger.js';
|
|
3
4
|
import { emptySettings } from './Settings.js';
|
|
@@ -8,6 +9,9 @@ export const mergeSettingsStack = (settingsStack) => {
|
|
|
8
9
|
let remoteSettings;
|
|
9
10
|
let cacheDirectory;
|
|
10
11
|
let customSettings;
|
|
12
|
+
let profileExport;
|
|
13
|
+
let startup;
|
|
14
|
+
let enterprise;
|
|
11
15
|
for (const settings of settingsStack) {
|
|
12
16
|
defaultProfile = settings.defaultProfile ?? defaultProfile;
|
|
13
17
|
defaultAgent = settings.defaultAgent ?? defaultAgent;
|
|
@@ -15,6 +19,9 @@ export const mergeSettingsStack = (settingsStack) => {
|
|
|
15
19
|
remoteSettings = settings.remoteSettings ?? remoteSettings;
|
|
16
20
|
cacheDirectory = settings.cacheDirectory ?? cacheDirectory;
|
|
17
21
|
customSettings = mergeOptionalCustomSettings(customSettings, settings.customSettings);
|
|
22
|
+
profileExport = mergeOptionalBoolean(profileExport, settings.profileExport);
|
|
23
|
+
startup = settings.startup === undefined ? startup : { ...startup, ...settings.startup };
|
|
24
|
+
enterprise = settings.enterprise === undefined ? enterprise : { ...enterprise, ...settings.enterprise };
|
|
18
25
|
}
|
|
19
26
|
return {
|
|
20
27
|
...emptySettings(),
|
|
@@ -24,8 +31,12 @@ export const mergeSettingsStack = (settingsStack) => {
|
|
|
24
31
|
remoteSettings: remoteSettings ?? [],
|
|
25
32
|
cacheDirectory,
|
|
26
33
|
customSettings: customSettings ?? {},
|
|
34
|
+
profileExport,
|
|
35
|
+
startup: startup ?? {},
|
|
36
|
+
enterprise: enterprise ?? {},
|
|
27
37
|
};
|
|
28
38
|
};
|
|
39
|
+
const mergeOptionalBoolean = (lowerPrecedence, higherPrecedence) => higherPrecedence ?? lowerPrecedence;
|
|
29
40
|
const mergeOptionalCustomSettings = (lowerPrecedence, higherPrecedence) => higherPrecedence === undefined ? lowerPrecedence : mergeCustomSettings(lowerPrecedence, higherPrecedence);
|
|
30
41
|
const mergeCustomSettings = (lowerPrecedence, higherPrecedence) => mergeObjectsWithPolicy(lowerPrecedence, higherPrecedence);
|
|
31
42
|
//# sourceMappingURL=SettingsMerger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsMerger.js","sourceRoot":"","sources":["../../src/settings/SettingsMerger.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAkC,EAAY,EAAE;IACjF,IAAI,cAAkC,CAAC;IACvC,IAAI,YAAgC,CAAC;IACrC,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAAkC,CAAC;IACvC,IAAI,cAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsMerger.js","sourceRoot":"","sources":["../../src/settings/SettingsMerger.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qDAAqD;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAkC,EAAY,EAAE;IACjF,IAAI,cAAkC,CAAC;IACvC,IAAI,YAAgC,CAAC;IACrC,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAAkC,CAAC;IACvC,IAAI,cAA0C,CAAC;IAC/C,IAAI,aAAkC,CAAC;IACvC,IAAI,OAA4B,CAAC;IACjC,IAAI,UAAkC,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC;QAErD,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,2BAA2B,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QACtF,aAAa,GAAG,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC5E,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzF,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1G,CAAC;IAED,OAAO;QACL,GAAG,aAAa,EAAE;QAClB,cAAc;QACd,YAAY;QACZ,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,cAAc;QACd,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,aAAa;QACb,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,UAAU,EAAE,UAAU,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,eAAoC,EACpC,gBAAqC,EAChB,EAAE,CAAC,gBAAgB,IAAI,eAAe,CAAC;AAE9D,MAAM,2BAA2B,GAAG,CAClC,eAA2C,EAC3C,gBAA4C,EAChB,EAAE,CAC9B,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE5G,MAAM,mBAAmB,GAAG,CAC1B,eAA2C,EAC3C,gBAAgC,EAChB,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-outfitter/outfitter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Profile-oriented wrapper for launching pi, Claude Code, and future agent CLIs with reproducible configuration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -20,26 +20,22 @@
|
|
|
20
20
|
"requirements",
|
|
21
21
|
"src/schemas",
|
|
22
22
|
"doc",
|
|
23
|
+
"code/enterprise",
|
|
23
24
|
"README.md",
|
|
24
25
|
"LICENSE.md"
|
|
25
26
|
],
|
|
26
27
|
"scripts": {
|
|
27
|
-
"build": "tsc -p tsconfig.build.json && shx rm -rf dist/schemas && shx mkdir -p dist/schemas && shx cp src/schemas/*.json dist/schemas/ && shx chmod +x dist/cli.js",
|
|
28
|
+
"build": "tsc -p tsconfig.build.json && shx rm -rf dist/schemas && shx mkdir -p dist/schemas && shx cp src/schemas/*.json dist/schemas/ && shx mkdir -p dist/cli/commands/assets && shx cp src/cli/commands/assets/*.txt dist/cli/commands/assets/ && shx chmod +x dist/cli.js",
|
|
28
29
|
"prepare": "npm run build",
|
|
30
|
+
"prepack": "node scripts/sync-package-assets.mjs",
|
|
29
31
|
"dev_install": "node scripts/dev-install.mjs",
|
|
30
|
-
"docs:dev": "npm --prefix doc_site run dev --",
|
|
31
|
-
"docs:build": "npm --prefix doc_site run build",
|
|
32
|
-
"docs:start": "npm --prefix doc_site run start --",
|
|
33
|
-
"docs:lint": "eslint doc_site --config doc_site/eslint.config.js",
|
|
34
|
-
"docs:ci": "npm --prefix doc_site ci && npm run docs:lint && npm run docs:build",
|
|
35
32
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
36
33
|
"lint": "eslint .",
|
|
37
34
|
"lint:fix": "eslint . --fix",
|
|
38
35
|
"test": "vitest --run",
|
|
39
36
|
"coverage": "vitest --run --coverage",
|
|
40
|
-
"
|
|
41
|
-
"check": "
|
|
42
|
-
"check-ci": "prettier --check . && npm run lint && npm run coverage && npm run docs:ci"
|
|
37
|
+
"check": "npm run lint:fix && npm run coverage",
|
|
38
|
+
"check-ci": "prettier --check . && npm run lint && npm run coverage"
|
|
43
39
|
},
|
|
44
40
|
"dependencies": {
|
|
45
41
|
"@earendil-works/pi-coding-agent": "^0.78.1",
|
|
@@ -81,7 +77,7 @@
|
|
|
81
77
|
"./skills"
|
|
82
78
|
]
|
|
83
79
|
},
|
|
84
|
-
"license": "
|
|
80
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
85
81
|
"publishConfig": {
|
|
86
82
|
"access": "public"
|
|
87
83
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"pattern": "^[a-z0-9][a-z0-9._-]*[a-z0-9]$|^[a-z0-9]$"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
+
"profile_export": { "type": "boolean" },
|
|
21
22
|
"state_persistence": {
|
|
22
23
|
"type": "object",
|
|
23
24
|
"additionalProperties": {
|
|
@@ -50,6 +51,19 @@
|
|
|
50
51
|
"type": "object",
|
|
51
52
|
"additionalProperties": { "type": "string" }
|
|
52
53
|
},
|
|
54
|
+
"deepwork": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": {
|
|
57
|
+
"jobs": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"items": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"pattern": "^[a-z][a-z0-9_]*$"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"additionalProperties": true
|
|
66
|
+
},
|
|
53
67
|
"pi": {
|
|
54
68
|
"type": "object",
|
|
55
69
|
"properties": {
|
|
@@ -115,12 +129,33 @@
|
|
|
115
129
|
},
|
|
116
130
|
"additionalProperties": true,
|
|
117
131
|
"$defs": {
|
|
118
|
-
"
|
|
132
|
+
"appendSystemPromptEntry": {
|
|
119
133
|
"oneOf": [
|
|
120
134
|
{ "type": "string" },
|
|
135
|
+
{
|
|
136
|
+
"type": "object",
|
|
137
|
+
"required": ["file"],
|
|
138
|
+
"properties": {
|
|
139
|
+
"file": { "type": "string" }
|
|
140
|
+
},
|
|
141
|
+
"additionalProperties": false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "object",
|
|
145
|
+
"required": ["repo_file"],
|
|
146
|
+
"properties": {
|
|
147
|
+
"repo_file": { "type": "string" }
|
|
148
|
+
},
|
|
149
|
+
"additionalProperties": false
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
"appendSystemPrompt": {
|
|
154
|
+
"oneOf": [
|
|
155
|
+
{ "$ref": "#/$defs/appendSystemPromptEntry" },
|
|
121
156
|
{
|
|
122
157
|
"type": "array",
|
|
123
|
-
"items": { "
|
|
158
|
+
"items": { "$ref": "#/$defs/appendSystemPromptEntry" }
|
|
124
159
|
}
|
|
125
160
|
]
|
|
126
161
|
}
|
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
"default_profile": { "type": "string", "minLength": 1 },
|
|
8
8
|
"default_agent": { "enum": ["pi", "claude"] },
|
|
9
9
|
"cache_directory": { "type": "string", "minLength": 1 },
|
|
10
|
+
"profile_export": { "type": "boolean" },
|
|
11
|
+
"startup": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"description": "Controls Outfitter startup presentation inside launched agents.",
|
|
14
|
+
"properties": {
|
|
15
|
+
"ascii_art": {
|
|
16
|
+
"type": "boolean",
|
|
17
|
+
"description": "Show the Outfitter ASCII/brand header on Pi startup. Defaults to true."
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": false
|
|
21
|
+
},
|
|
22
|
+
"enterprise": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"description": "Enterprise governance settings. User-home ~/.outfitter/settings.yml is the source of truth for these controls.",
|
|
25
|
+
"properties": {
|
|
26
|
+
"private_profile_catalogs": {
|
|
27
|
+
"type": "boolean",
|
|
28
|
+
"description": "Enable confirmed-private GitHub profile catalogs after reviewing the Outfitter Enterprise license or enterprise agreement."
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"additionalProperties": false
|
|
32
|
+
},
|
|
10
33
|
"profile_sources": {
|
|
11
34
|
"type": "array",
|
|
12
35
|
"items": { "$ref": "profile-source.schema.json" }
|
package/doc/.deepreview
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
controllable_elements_matrix:
|
|
2
|
-
description: "Review controllable element mappings and support-status claims for judgment-based accuracy."
|
|
3
|
-
match:
|
|
4
|
-
include:
|
|
5
|
-
- "controllable-elements.md"
|
|
6
|
-
review:
|
|
7
|
-
strategy: individual
|
|
8
|
-
instructions: |
|
|
9
|
-
Review doc/controllable-elements.md for judgment-based mapping accuracy.
|
|
10
|
-
This rule provides judgment-based review coverage for OFTR-007.1,
|
|
11
|
-
OFTR-007.2, and OFTR-007.3 concerns that cannot be validated
|
|
12
|
-
deterministically by the controllable_elements_matrix DeepSchema.
|
|
13
|
-
|
|
14
|
-
Deterministic facts such as table shape, one row per defined term, allowed
|
|
15
|
-
status values, and status definition presence are handled by the
|
|
16
|
-
controllable_elements_matrix DeepSchema. Do not duplicate those exact
|
|
17
|
-
checks here.
|
|
18
|
-
|
|
19
|
-
Check the following judgment-based concerns:
|
|
20
|
-
1. Pi mechanism descriptions accurately reflect pi terminology and native
|
|
21
|
-
behavior.
|
|
22
|
-
2. Non-pi mappings are clearly framed as roadmap/experimental unless a
|
|
23
|
-
supported adapter exists.
|
|
24
|
-
3. Support status claims do not overstate tested Outfitter behavior.
|
|
25
|
-
4. Defined controllable elements are meaningful product-boundary concepts,
|
|
26
|
-
not implementation-only details.
|
|
27
|
-
|
|
28
|
-
Output Format:
|
|
29
|
-
- PASS: Mappings and support-status claims are accurate and appropriately qualified.
|
|
30
|
-
- FAIL: Issues found. List each inaccurate or overstated mapping/status claim with a line reference.
|