agentinit 1.14.0 → 1.15.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.
@@ -0,0 +1,156 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { promises as fs } from 'fs';
3
+ import { homedir } from 'os';
4
+ import { join } from 'path';
5
+ import { writeFile } from '../utils/fs.js';
6
+ const MARKETPLACE_IDENTIFIER_PATTERN = /^[a-z0-9][a-z0-9._-]*$/;
7
+ const GITHUB_REPO_PATTERN = /^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)$/;
8
+ const GIT_REPO_URL_PATTERN = /^(https?:\/\/|ssh:\/\/|git@).+/;
9
+ export const BUILTIN_VERIFIED_GITHUB_REPOS = ['openai/codex-plugin-cc'];
10
+ export function getUserConfigPath() {
11
+ return join(homedir(), '.agentinit', 'config.json');
12
+ }
13
+ export function createDefaultUserConfig() {
14
+ return {
15
+ customMarketplaces: [],
16
+ verifiedGithubRepos: [],
17
+ };
18
+ }
19
+ export function normalizeMarketplaceIdentifier(identifier) {
20
+ const normalized = identifier.trim().toLowerCase();
21
+ if (!MARKETPLACE_IDENTIFIER_PATTERN.test(normalized)) {
22
+ throw new Error('Invalid marketplace identifier. Use lowercase letters, numbers, ".", "_" or "-".');
23
+ }
24
+ return normalized;
25
+ }
26
+ export function normalizeMarketplaceName(name, identifier) {
27
+ const normalized = name?.trim();
28
+ return normalized ? normalized : identifier;
29
+ }
30
+ export function normalizeMarketplaceRepoUrl(repoUrl) {
31
+ const normalized = repoUrl.trim().replace(/\/+$/, '');
32
+ if (!normalized || !GIT_REPO_URL_PATTERN.test(normalized)) {
33
+ throw new Error('Invalid marketplace repo URL. Use https://..., ssh://..., or git@...');
34
+ }
35
+ return normalized;
36
+ }
37
+ export function normalizeGitHubRepoRef(repo) {
38
+ const normalized = repo.trim();
39
+ const match = normalized.match(GITHUB_REPO_PATTERN);
40
+ if (!match) {
41
+ throw new Error('Invalid GitHub repo. Use exact owner/repo.');
42
+ }
43
+ return `${match[1].toLowerCase()}/${match[2].toLowerCase()}`;
44
+ }
45
+ function sanitizeCustomMarketplaceConfig(entry) {
46
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
47
+ return null;
48
+ }
49
+ const candidate = entry;
50
+ try {
51
+ const identifier = normalizeMarketplaceIdentifier(String(candidate.identifier || ''));
52
+ return {
53
+ identifier,
54
+ name: normalizeMarketplaceName(typeof candidate.name === 'string' ? candidate.name : undefined, identifier),
55
+ repoUrl: normalizeMarketplaceRepoUrl(String(candidate.repoUrl || '')),
56
+ };
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ export function sanitizeUserConfig(raw) {
63
+ const defaults = createDefaultUserConfig();
64
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
65
+ return defaults;
66
+ }
67
+ const parsed = raw;
68
+ const seenMarketplaces = new Set();
69
+ const customMarketplaces = [];
70
+ if (Array.isArray(parsed.customMarketplaces)) {
71
+ for (const entry of parsed.customMarketplaces) {
72
+ const sanitized = sanitizeCustomMarketplaceConfig(entry);
73
+ if (!sanitized || seenMarketplaces.has(sanitized.identifier)) {
74
+ continue;
75
+ }
76
+ seenMarketplaces.add(sanitized.identifier);
77
+ customMarketplaces.push(sanitized);
78
+ }
79
+ }
80
+ const seenRepos = new Set();
81
+ const verifiedGithubRepos = [];
82
+ if (Array.isArray(parsed.verifiedGithubRepos)) {
83
+ for (const entry of parsed.verifiedGithubRepos) {
84
+ if (typeof entry !== 'string') {
85
+ continue;
86
+ }
87
+ try {
88
+ const normalized = normalizeGitHubRepoRef(entry);
89
+ if (seenRepos.has(normalized)) {
90
+ continue;
91
+ }
92
+ seenRepos.add(normalized);
93
+ verifiedGithubRepos.push(normalized);
94
+ }
95
+ catch {
96
+ continue;
97
+ }
98
+ }
99
+ }
100
+ let defaultMarketplace;
101
+ if (typeof parsed.defaultMarketplace === 'string') {
102
+ try {
103
+ defaultMarketplace = normalizeMarketplaceIdentifier(parsed.defaultMarketplace);
104
+ }
105
+ catch {
106
+ defaultMarketplace = undefined;
107
+ }
108
+ }
109
+ return {
110
+ ...(defaultMarketplace ? { defaultMarketplace } : {}),
111
+ customMarketplaces,
112
+ verifiedGithubRepos,
113
+ };
114
+ }
115
+ export function readUserConfigSync() {
116
+ const configPath = getUserConfigPath();
117
+ if (!existsSync(configPath)) {
118
+ return createDefaultUserConfig();
119
+ }
120
+ try {
121
+ const content = readFileSync(configPath, 'utf8');
122
+ return sanitizeUserConfig(JSON.parse(content));
123
+ }
124
+ catch {
125
+ return createDefaultUserConfig();
126
+ }
127
+ }
128
+ export async function readUserConfig() {
129
+ const configPath = getUserConfigPath();
130
+ try {
131
+ const content = await fs.readFile(configPath, 'utf8');
132
+ return sanitizeUserConfig(JSON.parse(content));
133
+ }
134
+ catch {
135
+ return createDefaultUserConfig();
136
+ }
137
+ }
138
+ export async function writeUserConfig(config) {
139
+ const sanitized = sanitizeUserConfig(config);
140
+ await writeFile(getUserConfigPath(), `${JSON.stringify(sanitized, null, 2)}\n`);
141
+ }
142
+ export function getBuiltInVerifiedGithubRepos() {
143
+ return [...BUILTIN_VERIFIED_GITHUB_REPOS];
144
+ }
145
+ export function getEffectiveVerifiedGithubReposSync() {
146
+ const repos = new Set(BUILTIN_VERIFIED_GITHUB_REPOS);
147
+ for (const repo of readUserConfigSync().verifiedGithubRepos) {
148
+ repos.add(repo);
149
+ }
150
+ return [...repos];
151
+ }
152
+ export function isVerifiedGitHubRepoSync(owner, repo) {
153
+ const normalized = normalizeGitHubRepoRef(`${owner}/${repo}`);
154
+ return getEffectiveVerifiedGithubReposSync().includes(normalized);
155
+ }
156
+ //# sourceMappingURL=userConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/core/userConfig.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentinit",
3
- "version": "1.14.0",
3
+ "version": "1.15.1",
4
4
  "description": "CLI tool and library for managing AI coding agents and verifying MCP servers",
5
5
  "repository": {
6
6
  "type": "git",