ios-agent-mcp 2.7.0 → 2.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/README.md +23 -6
- package/data/knowledge.json +1 -1
- package/dist/analyzers/launch-screen.d.ts +12 -0
- package/dist/analyzers/launch-screen.js +377 -0
- package/dist/analyzers/launch-screen.js.map +1 -0
- package/dist/analyzers/performance.js +2 -2
- package/dist/analyzers/performance.js.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/issue-report.d.ts +4 -4
- package/dist/issue-report.js +3 -3
- package/dist/issue-report.js.map +1 -1
- package/dist/private-feedback.d.ts +90 -0
- package/dist/private-feedback.js +55 -0
- package/dist/private-feedback.js.map +1 -0
- package/dist/release/model.d.ts +360 -0
- package/dist/release/model.js +546 -0
- package/dist/release/model.js.map +1 -0
- package/dist/release/package.d.ts +16 -0
- package/dist/release/package.js +166 -0
- package/dist/release/package.js.map +1 -0
- package/dist/release/project.d.ts +4 -0
- package/dist/release/project.js +45 -0
- package/dist/release/project.js.map +1 -0
- package/dist/result.d.ts +8 -8
- package/dist/unified.js +21 -2
- package/dist/unified.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/mcp.json +5 -1
- package/package.json +5 -3
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Options } from './model.js';
|
|
2
|
+
export declare function verifyPackage(dir: string): Promise<{
|
|
3
|
+
model: any;
|
|
4
|
+
manifest: any;
|
|
5
|
+
integrity: any;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function prepareRelease(options: Options): Promise<{
|
|
8
|
+
releaseId: string;
|
|
9
|
+
path: string;
|
|
10
|
+
status: any;
|
|
11
|
+
reused: boolean;
|
|
12
|
+
reusedSections: string[];
|
|
13
|
+
model: import("./model.js").AppModel;
|
|
14
|
+
questions: import("./model.js").Question[];
|
|
15
|
+
}>;
|
|
16
|
+
export declare function appleCLI(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/** Local immutable packages. No Apple, AI, browser or network client is imported. */
|
|
2
|
+
import { mkdir, lstat, readFile, writeFile, rename, rm, realpath, readdir } from 'node:fs/promises';
|
|
3
|
+
import { resolve, join } from 'node:path';
|
|
4
|
+
import { execFile } from 'node:child_process';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import { analyzeApp, canonical, digest, AppModelSchema } from './model.js';
|
|
8
|
+
import { VERSION } from '../version.js';
|
|
9
|
+
const files = ['app-model.json', 'requirements.json', 'questions.json', 'change-plan.json', 'manifest.json'];
|
|
10
|
+
async function directory(p) {
|
|
11
|
+
try {
|
|
12
|
+
const s = await lstat(p);
|
|
13
|
+
if (!s.isDirectory() || s.isSymbolicLink())
|
|
14
|
+
throw Error('Unsafe release directory');
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (e.code !== 'ENOENT')
|
|
18
|
+
throw e;
|
|
19
|
+
await mkdir(p, { mode: 0o700 });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function regular(p) {
|
|
23
|
+
const s = await lstat(p);
|
|
24
|
+
if (!s.isFile() || s.isSymbolicLink() || s.size > 16 * 1024 * 1024)
|
|
25
|
+
throw Error('Unsafe package artifact');
|
|
26
|
+
return readFile(p, 'utf8');
|
|
27
|
+
}
|
|
28
|
+
export async function verifyPackage(dir) {
|
|
29
|
+
const s = await lstat(dir);
|
|
30
|
+
if (!s.isDirectory() || s.isSymbolicLink())
|
|
31
|
+
throw Error('Unsafe package directory');
|
|
32
|
+
const integrity = JSON.parse(await regular(join(dir, 'integrity.json')));
|
|
33
|
+
if (canonical(Object.keys(integrity).sort()) !== canonical([...files].sort()))
|
|
34
|
+
throw Error('Invalid package integrity manifest');
|
|
35
|
+
for (const f of files)
|
|
36
|
+
if (digest(await regular(join(dir, f))) !== integrity[f])
|
|
37
|
+
throw Error('Package evidence changed; preserve it for inspection and use a new release directory.');
|
|
38
|
+
const model = JSON.parse(await regular(join(dir, 'app-model.json'))), manifest = JSON.parse(await regular(join(dir, 'manifest.json')));
|
|
39
|
+
if (model.schemaVersion !== 1 || manifest.packageSchemaVersion !== 1 || digest(canonical(model)) !== manifest.appModelHash)
|
|
40
|
+
throw Error('Invalid release package schema or model hash');
|
|
41
|
+
AppModelSchema.parse(model);
|
|
42
|
+
const { generatedAt: _at, semanticHash, ...semantic } = manifest;
|
|
43
|
+
if (digest(canonical(semantic)) !== semanticHash)
|
|
44
|
+
throw Error('Invalid semantic manifest hash');
|
|
45
|
+
return { model, manifest, integrity };
|
|
46
|
+
}
|
|
47
|
+
export async function prepareRelease(options) {
|
|
48
|
+
const analysis = await analyzeApp(options), root = await realpath(resolve(options.root));
|
|
49
|
+
const local = join(root, '.ios-agent'), releases = join(local, 'releases');
|
|
50
|
+
await directory(local);
|
|
51
|
+
await directory(releases);
|
|
52
|
+
const lock = join(releases, '.prepare-lock');
|
|
53
|
+
try {
|
|
54
|
+
await mkdir(lock, { mode: 0o700 });
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
throw Error('Preparation already locked. If interrupted, inspect and remove .ios-agent/releases/.prepare-lock before resuming.');
|
|
58
|
+
}
|
|
59
|
+
let stage;
|
|
60
|
+
try {
|
|
61
|
+
const ignore = join(releases, '.gitignore');
|
|
62
|
+
try {
|
|
63
|
+
if ((await regular(ignore)) !== '*\n')
|
|
64
|
+
throw Error('Release ignore file differs; refusing to write private artifacts.');
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
if (e.code !== 'ENOENT')
|
|
68
|
+
throw e;
|
|
69
|
+
await writeFile(ignore, '*\n', { flag: 'wx', mode: 0o600 });
|
|
70
|
+
}
|
|
71
|
+
let revision = null;
|
|
72
|
+
try {
|
|
73
|
+
const r = await promisify(execFile)('git', ['--no-optional-locks', 'rev-parse', 'HEAD'], { cwd: root, timeout: 2000, maxBuffer: 1024, env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' } });
|
|
74
|
+
if (/^[a-f0-9]{40,64}$/.test(r.stdout.trim()))
|
|
75
|
+
revision = r.stdout.trim();
|
|
76
|
+
}
|
|
77
|
+
catch { /* An untracked project still produces a package. */ }
|
|
78
|
+
const modelHash = digest(canonical(analysis.model));
|
|
79
|
+
const implementationHash = digest((await Promise.all(['./model.js', './package.js', './project.js', '../analyzers/launch-screen.js'].map(p => readFile(new URL(p, import.meta.url))))).map(b => digest(b)).join(':'));
|
|
80
|
+
const identity = { protocol: 1, implementationHash, sourceFingerprint: analysis.sourceFingerprint, modelHash, tool: VERSION, revision };
|
|
81
|
+
const releaseId = 'local-' + digest(canonical(identity)).slice(0, 24), dest = join(releases, releaseId);
|
|
82
|
+
try {
|
|
83
|
+
await lstat(dest);
|
|
84
|
+
const saved = await verifyPackage(dest);
|
|
85
|
+
return { releaseId, path: dest, status: saved.manifest.status, reused: true, reusedSections: Object.keys(analysis.model.sectionHashes), model: analysis.model, questions: analysis.questions };
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
if (e.code !== 'ENOENT')
|
|
89
|
+
throw e;
|
|
90
|
+
}
|
|
91
|
+
// Reuse is evidence-level, not skipping input verification. Preserve unrelated stage objects.
|
|
92
|
+
const reusedSections = [];
|
|
93
|
+
const prior = (await readdir(releases)).filter(n => /^local-[a-f0-9]{24}$/.test(n)).sort();
|
|
94
|
+
for (const name of prior) {
|
|
95
|
+
const prev = await verifyPackage(join(releases, name));
|
|
96
|
+
if (canonical(prev.model.selection) !== canonical(analysis.model.selection))
|
|
97
|
+
continue;
|
|
98
|
+
for (const [section, hash] of Object.entries(analysis.model.sectionHashes))
|
|
99
|
+
if (prev.model.sectionHashes[section] === hash && !reusedSections.includes(section))
|
|
100
|
+
reusedSections.push(section);
|
|
101
|
+
}
|
|
102
|
+
// A second collection prevents packaging evidence from inputs changed during preparation.
|
|
103
|
+
if ((await analyzeApp(options)).sourceFingerprint !== analysis.sourceFingerprint)
|
|
104
|
+
throw Error('Project changed during analysis; rerun preparation.');
|
|
105
|
+
const manifest = { packageSchemaVersion: 1, appModelSchemaVersion: 1, releaseId, selection: analysis.model.selection, identity: analysis.model.claims.filter(c => ['bundleIdentifier', 'version', 'build'].includes(c.id)), sourceFingerprint: analysis.sourceFingerprint, repositoryRevision: revision, tools: { iosAgent: VERSION, implementationHash, node: process.version, xcode: 'NOT_CHECKED', swift: 'NOT_CHECKED' }, generatedAt: new Date().toISOString(), appModelHash: modelHash, sectionHashes: analysis.model.sectionHashes, evidenceHashes: Object.fromEntries(analysis.model.evidence.map(e => [e.id, e.sha256])), unresolvedBlockers: [...analysis.questions.filter(q => q.priority === 1).map(q => q.id), ...analysis.model.claims.filter(c => c.id.startsWith('launch-finding:')).map(c => c.id)], status: analysis.model.status === 'BLOCKED' ? 'BLOCKED' : 'DRAFT_LOCAL_ONLY', remoteState: 'NOT_CHECKED', buildTestsSigning: 'NOT_CHECKED' };
|
|
106
|
+
const { generatedAt: _timestamp, ...semanticManifest } = manifest;
|
|
107
|
+
const manifestWithHash = { ...manifest, semanticHash: digest(canonical(semanticManifest)) };
|
|
108
|
+
const artifacts = { 'app-model.json': analysis.model, 'requirements.json': analysis.requirements, 'questions.json': analysis.questions, 'change-plan.json': analysis.changePlan, 'manifest.json': manifestWithHash };
|
|
109
|
+
stage = join(releases, '.staging-' + randomUUID());
|
|
110
|
+
await mkdir(stage, { mode: 0o700 });
|
|
111
|
+
for (const dir of ['metadata', 'privacy', 'review', 'icons', 'screenshots', 'screenshots/raw', 'screenshots/composed', 'validation', 'evidence', 'approvals', 'operations'])
|
|
112
|
+
await mkdir(join(stage, dir), { recursive: true, mode: 0o700 });
|
|
113
|
+
const integrity = {};
|
|
114
|
+
for (const [f, v] of Object.entries(artifacts)) {
|
|
115
|
+
const content = canonical(v) + '\n';
|
|
116
|
+
await writeFile(join(stage, f), content, { flag: 'wx', mode: 0o600 });
|
|
117
|
+
integrity[f] = digest(content);
|
|
118
|
+
}
|
|
119
|
+
await writeFile(join(stage, 'integrity.json'), canonical(integrity) + '\n', { flag: 'wx', mode: 0o600 });
|
|
120
|
+
await rename(stage, dest);
|
|
121
|
+
stage = undefined;
|
|
122
|
+
await verifyPackage(dest);
|
|
123
|
+
return { releaseId, path: dest, status: manifest.status, reused: false, reusedSections: reusedSections.sort(), model: analysis.model, questions: analysis.questions };
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
if (stage)
|
|
127
|
+
await rm(stage, { recursive: true, force: true });
|
|
128
|
+
await rm(lock, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function appleCLI(args) {
|
|
132
|
+
const command = args.shift();
|
|
133
|
+
if (!['analyze', 'prepare'].includes(command || ''))
|
|
134
|
+
throw Error('Usage: ios-agent-mcp apple analyze|prepare --project ROOT [--xcodeproj FILE] [--workspace FILE] [--target NAME] [--configuration Release] [--prompt TEXT] [--json]');
|
|
135
|
+
const options = { root: process.cwd() };
|
|
136
|
+
let json = false;
|
|
137
|
+
const keys = { '--project': 'root', '--xcodeproj': 'project', '--workspace': 'workspace', '--target': 'target', '--configuration': 'configuration', '--prompt': 'prompt' };
|
|
138
|
+
while (args.length) {
|
|
139
|
+
const a = args.shift();
|
|
140
|
+
if (a === '--json') {
|
|
141
|
+
json = true;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (!keys[a] || !args.length || args[0].startsWith('--'))
|
|
145
|
+
throw Error('Unknown option or missing argument');
|
|
146
|
+
options[keys[a]] = args.shift();
|
|
147
|
+
}
|
|
148
|
+
const result = command === 'prepare' ? await prepareRelease(options) : await analyzeApp(options);
|
|
149
|
+
if (json)
|
|
150
|
+
console.log(canonical(result));
|
|
151
|
+
else {
|
|
152
|
+
console.log('TARGET ' + (result.model.selection.target || 'NEEDS SELECTION') + ' / ' + result.model.selection.configuration);
|
|
153
|
+
console.log('STATUS ' + result.model.status);
|
|
154
|
+
for (const c of result.model.claims.filter(c => ['bundleIdentifier', 'version', 'build', 'info-plist', 'launch-screen', 'app-icon-name'].includes(c.id)))
|
|
155
|
+
console.log(c.status + ' ' + c.id + ': ' + (c.value ?? 'not established'));
|
|
156
|
+
console.log('INFERRED ' + result.model.features.length + ' API-based feature candidates; ' + result.model.screens.length + ' screen candidates. Runtime NOT CHECKED.');
|
|
157
|
+
if ('releaseId' in result)
|
|
158
|
+
console.log((result.reused ? 'REUSED' : 'GENERATED') + ' local package: ' + result.path);
|
|
159
|
+
for (const q of result.questions)
|
|
160
|
+
console.log('NEEDS CONFIRMATION [' + q.priority + '] ' + q.question);
|
|
161
|
+
console.log('Build/signing NOT CHECKED. No credentials, AI provider or remote changes.');
|
|
162
|
+
}
|
|
163
|
+
if (result.model.status === 'BLOCKED')
|
|
164
|
+
process.exitCode = 2;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/release/package.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ObjectMap = Record<string, any>;
|
|
2
|
+
export declare const list: (v: any) => any[];
|
|
3
|
+
export declare function parsePropertyList(b: Buffer): ObjectMap;
|
|
4
|
+
export declare function projectPaths(objects: ObjectMap, base: string): (id: string, seen?: Set<string>) => string | undefined;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Shared static Xcode helpers. Never evaluates build scripts or resolves packages. */
|
|
2
|
+
import { posix } from 'node:path';
|
|
3
|
+
import * as plist from 'plist';
|
|
4
|
+
export const list = (v) => Array.isArray(v) ? v : v ? [v] : [];
|
|
5
|
+
export function parsePropertyList(b) {
|
|
6
|
+
const v = b.subarray(0, 6).toString() === 'bplist' ? plist.parseBinary(b) : plist.parse(b.toString());
|
|
7
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
8
|
+
throw Error('Expected a property dictionary');
|
|
9
|
+
return v;
|
|
10
|
+
}
|
|
11
|
+
export function projectPaths(objects, base) {
|
|
12
|
+
const parents = new Map();
|
|
13
|
+
for (const [id, ob] of Object.entries(objects))
|
|
14
|
+
for (const child of list(ob.children))
|
|
15
|
+
parents.set(child, [...(parents.get(child) || []), id]);
|
|
16
|
+
function filePath(id, seen = new Set()) {
|
|
17
|
+
if (seen.has(id))
|
|
18
|
+
return;
|
|
19
|
+
seen.add(id);
|
|
20
|
+
const ob = objects[id];
|
|
21
|
+
if (!ob)
|
|
22
|
+
return;
|
|
23
|
+
const name = ob.path || '';
|
|
24
|
+
if (typeof name !== 'string' || /\$[({]/.test(name) || name.startsWith('/'))
|
|
25
|
+
return;
|
|
26
|
+
let parent = base;
|
|
27
|
+
if (ob.sourceTree === '<group>') {
|
|
28
|
+
const ps = parents.get(id) || [];
|
|
29
|
+
if (ps.length > 1)
|
|
30
|
+
return;
|
|
31
|
+
if (ps.length === 1) {
|
|
32
|
+
const p = filePath(ps[0], seen);
|
|
33
|
+
if (p === undefined)
|
|
34
|
+
return;
|
|
35
|
+
parent = p;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (ob.sourceTree && ob.sourceTree !== 'SOURCE_ROOT')
|
|
39
|
+
return;
|
|
40
|
+
const p = posix.normalize(posix.join(parent, name));
|
|
41
|
+
return p === '..' || p.startsWith('../') ? undefined : p;
|
|
42
|
+
}
|
|
43
|
+
return filePath;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/release/project.ts"],"names":[],"mappings":"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"}
|
package/dist/result.d.ts
CHANGED
|
@@ -28,8 +28,8 @@ export declare const issueSchema: z.ZodObject<{
|
|
|
28
28
|
excerpt: z.ZodString;
|
|
29
29
|
}, "strip", z.ZodTypeAny, {
|
|
30
30
|
message: string;
|
|
31
|
-
file: string;
|
|
32
31
|
severity: "blocker" | "serious" | "minor";
|
|
32
|
+
file: string;
|
|
33
33
|
line: number;
|
|
34
34
|
rule: string;
|
|
35
35
|
consequence: string;
|
|
@@ -38,8 +38,8 @@ export declare const issueSchema: z.ZodObject<{
|
|
|
38
38
|
excerpt: string;
|
|
39
39
|
}, {
|
|
40
40
|
message: string;
|
|
41
|
-
file: string;
|
|
42
41
|
severity: "blocker" | "serious" | "minor";
|
|
42
|
+
file: string;
|
|
43
43
|
line: number;
|
|
44
44
|
rule: string;
|
|
45
45
|
consequence: string;
|
|
@@ -80,8 +80,8 @@ export declare const reviewOutputShape: {
|
|
|
80
80
|
excerpt: z.ZodString;
|
|
81
81
|
}, "strip", z.ZodTypeAny, {
|
|
82
82
|
message: string;
|
|
83
|
-
file: string;
|
|
84
83
|
severity: "blocker" | "serious" | "minor";
|
|
84
|
+
file: string;
|
|
85
85
|
line: number;
|
|
86
86
|
rule: string;
|
|
87
87
|
consequence: string;
|
|
@@ -90,8 +90,8 @@ export declare const reviewOutputShape: {
|
|
|
90
90
|
excerpt: string;
|
|
91
91
|
}, {
|
|
92
92
|
message: string;
|
|
93
|
-
file: string;
|
|
94
93
|
severity: "blocker" | "serious" | "minor";
|
|
94
|
+
file: string;
|
|
95
95
|
line: number;
|
|
96
96
|
rule: string;
|
|
97
97
|
consequence: string;
|
|
@@ -133,8 +133,8 @@ export declare const reviewOutputSchema: z.ZodObject<{
|
|
|
133
133
|
excerpt: z.ZodString;
|
|
134
134
|
}, "strip", z.ZodTypeAny, {
|
|
135
135
|
message: string;
|
|
136
|
-
file: string;
|
|
137
136
|
severity: "blocker" | "serious" | "minor";
|
|
137
|
+
file: string;
|
|
138
138
|
line: number;
|
|
139
139
|
rule: string;
|
|
140
140
|
consequence: string;
|
|
@@ -143,8 +143,8 @@ export declare const reviewOutputSchema: z.ZodObject<{
|
|
|
143
143
|
excerpt: string;
|
|
144
144
|
}, {
|
|
145
145
|
message: string;
|
|
146
|
-
file: string;
|
|
147
146
|
severity: "blocker" | "serious" | "minor";
|
|
147
|
+
file: string;
|
|
148
148
|
line: number;
|
|
149
149
|
rule: string;
|
|
150
150
|
consequence: string;
|
|
@@ -156,8 +156,8 @@ export declare const reviewOutputSchema: z.ZodObject<{
|
|
|
156
156
|
}, "strip", z.ZodTypeAny, {
|
|
157
157
|
issues: {
|
|
158
158
|
message: string;
|
|
159
|
-
file: string;
|
|
160
159
|
severity: "blocker" | "serious" | "minor";
|
|
160
|
+
file: string;
|
|
161
161
|
line: number;
|
|
162
162
|
rule: string;
|
|
163
163
|
consequence: string;
|
|
@@ -178,8 +178,8 @@ export declare const reviewOutputSchema: z.ZodObject<{
|
|
|
178
178
|
}, {
|
|
179
179
|
issues: {
|
|
180
180
|
message: string;
|
|
181
|
-
file: string;
|
|
182
181
|
severity: "blocker" | "serious" | "minor";
|
|
182
|
+
file: string;
|
|
183
183
|
line: number;
|
|
184
184
|
rule: string;
|
|
185
185
|
consequence: string;
|
package/dist/unified.js
CHANGED
|
@@ -12,13 +12,23 @@ import { z } from 'zod';
|
|
|
12
12
|
import { VERSION } from './version.js';
|
|
13
13
|
import { withDevelopmentFeedback } from './development-feedback.js';
|
|
14
14
|
import { issueReportTool, prepareIssueReport } from './issue-report.js';
|
|
15
|
+
import { privateFeedbackTool, createPrivateFeedback } from './private-feedback.js';
|
|
15
16
|
const require = createRequire(import.meta.url);
|
|
16
17
|
const args = process.argv.slice(2);
|
|
17
18
|
const cli = () => require.resolve('@nagarjuna2002/ios-agent/dist/index.js');
|
|
18
19
|
if (args.includes('--version'))
|
|
19
20
|
console.log(VERSION);
|
|
20
21
|
else if (args.includes('--help'))
|
|
21
|
-
console.log(`ios-agent-mcp ${VERSION}\nOne MCP connection: Swift reviews, Apple references, app creation and simulator tools.\nRequires Node 20+. Simulator operations require macOS/Xcode.\nUsage: ios-agent-mcp [--project PATH]\n ios-agent-mcp new MyApp --brief "Your idea" --xcodegen\n ios-agent-mcp loop init --project PATH --brief BRIEF.md --checks checks.json\n ios-agent-mcp loop resume --project PATH\n ios-agent-mcp loop status --project PATH\nThe starter requires your coding agent to implement the app features.`);
|
|
22
|
+
console.log(`ios-agent-mcp ${VERSION}\nOne MCP connection: Swift reviews, Apple references, app creation and simulator tools.\nRequires Node 20+. Simulator operations require macOS/Xcode.\nUsage: ios-agent-mcp [--project PATH]\n ios-agent-mcp new MyApp --brief "Your idea" --xcodegen\n ios-agent-mcp loop init --project PATH --brief BRIEF.md --checks checks.json\n ios-agent-mcp loop resume --project PATH\n ios-agent-mcp loop status --project PATH\n ios-agent-mcp apple analyze|prepare --project PATH [--target NAME] [--configuration Release] [--json]\nThe starter requires your coding agent to implement the app features.`);
|
|
23
|
+
else if (args[0] === 'apple') {
|
|
24
|
+
try {
|
|
25
|
+
await (await import('./release/package.js')).appleCLI(args.slice(1));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
console.error('Local Apple analysis failed. Check selection, file access and package integrity. No external action performed.');
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
22
32
|
else if (args[0] === 'loop') {
|
|
23
33
|
try {
|
|
24
34
|
await (await import('./app-loop.js')).appLoop(args.slice(1));
|
|
@@ -48,12 +58,21 @@ else {
|
|
|
48
58
|
const tools = catalog.flatMap((list, i) => list.tools.map(tool => { if (owners.has(tool.name))
|
|
49
59
|
throw Error(`Duplicate tool ${tool.name}`); owners.set(tool.name, clients[i]); return tool; }));
|
|
50
60
|
tools.push({ name: 'create_app', description: 'Create an editable Swift app starter, implementation brief and optional XcodeGen specification/icon layers. Writes a NEW project; does not implement the full app idea. Then use source retrieval, review and simulator tools to implement and verify it.', inputSchema: { type: 'object', properties: { name: { type: 'string' }, directory: { type: 'string', description: 'Parent directory for the new project' }, brief: { type: 'string' }, xcodegen: { type: 'boolean', default: true } }, required: ['name', 'directory', 'brief'], additionalProperties: false } });
|
|
51
|
-
tools.push(issueReportTool);
|
|
61
|
+
tools.push(issueReportTool, privateFeedbackTool);
|
|
62
|
+
const privateFeedback = createPrivateFeedback();
|
|
52
63
|
const server = new Server({ name: 'ios-agent-mcp', version: VERSION }, { capabilities: { tools: {}, resources: {} } });
|
|
53
64
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
|
|
54
65
|
server.setRequestHandler(ListResourcesRequestSchema, () => clients[0].listResources());
|
|
55
66
|
server.setRequestHandler(ReadResourceRequestSchema, request => clients[0].readResource(request.params));
|
|
56
67
|
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
68
|
+
if (request.params.name === 'private_feedback') {
|
|
69
|
+
try {
|
|
70
|
+
return { content: [{ type: 'text', text: JSON.stringify(await privateFeedback(request.params.arguments), null, 2) }] };
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return { isError: true, content: [{ type: 'text', text: 'Private feedback rejected. Use a valid configured destination and preview, then obtain explicit approval. No arbitrary text or diagnostics accepted.' }] };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
57
76
|
if (request.params.name === 'prepare_issue_report') {
|
|
58
77
|
try {
|
|
59
78
|
return { content: [{ type: 'text', text: JSON.stringify(prepareIssueReport(request.params.arguments), null, 2) }] };
|
package/dist/unified.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC1J,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;AAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,
|
|
1
|
+
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "2.7.
|
|
1
|
+
export declare const VERSION = "2.7.1";
|
package/dist/version.js
CHANGED
package/mcp.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ios-agent-mcp",
|
|
3
3
|
"displayName": "iOS Agent",
|
|
4
|
-
"version": "2.7.
|
|
4
|
+
"version": "2.7.1",
|
|
5
5
|
"description": "Unified iOS development tools: Swift reviews, Apple source retrieval, app scaffolding and Xcode simulator workflows.",
|
|
6
6
|
"author": "Nagarjuna Reddy",
|
|
7
7
|
"license": "MIT",
|
|
@@ -180,6 +180,10 @@
|
|
|
180
180
|
{
|
|
181
181
|
"name": "prepare_issue_report",
|
|
182
182
|
"summary": "Local category-only issue preview; no network, diagnostics collection or submission. User reviews and signs in to GitHub to submit."
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "private_feedback",
|
|
186
|
+
"summary": "Source-preview consented category-only private feedback. Preview first, explicitly approve, then submit to configured HTTPS receiver; unavailable without backend. No public fallback."
|
|
183
187
|
}
|
|
184
188
|
],
|
|
185
189
|
"resources": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ios-agent-mcp",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "MCP server for modern iOS/Swift development \u2014 concurrency isolation, architecture boundaries, SwiftUI, and App Store readiness analysis",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -41,9 +41,11 @@
|
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
44
|
-
"zod": "^3.23.8",
|
|
45
44
|
"@nagarjuna2002/ios-agent": "0.3.0",
|
|
46
|
-
"@nagarjuna2002/ios-simulator-mcp": "0.2.0"
|
|
45
|
+
"@nagarjuna2002/ios-simulator-mcp": "0.2.0",
|
|
46
|
+
"fast-xml-parser": "5.11.1",
|
|
47
|
+
"plist": "5.0.0",
|
|
48
|
+
"zod": "^3.23.8"
|
|
47
49
|
},
|
|
48
50
|
"devDependencies": {
|
|
49
51
|
"@types/express": "^5.0.6",
|