apt-mcp-agent-setup 3.3.4 → 3.5.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.
Files changed (126) hide show
  1. package/README.md +6 -1
  2. package/bin/cli.js +1 -1
  3. package/bundle/NOTICES.md +0 -0
  4. package/bundle/core.enc +0 -0
  5. package/bundle/mcp-rules.enc +0 -0
  6. package/bundle/skills-aso.enc +0 -0
  7. package/bundle/skills-ba.enc +0 -0
  8. package/bundle/skills-base.enc +0 -0
  9. package/bundle/skills-be.enc +0 -0
  10. package/bundle/skills-design.enc +0 -0
  11. package/bundle/skills-fe.enc +0 -0
  12. package/bundle/skills-marketing.enc +0 -0
  13. package/bundle/skills-mobile.enc +0 -0
  14. package/bundle/skills-pm.enc +0 -0
  15. package/docs/apt-3.5.0-migration.md +37 -0
  16. package/docs/technical-sources-release-checklist.md +14 -0
  17. package/docs/technical-sources.md +125 -0
  18. package/docs/upstream-manifest.json +89 -0
  19. package/integrity-manifest.json +127 -106
  20. package/package.json +1 -1
  21. package/release-check.js +76 -71
  22. package/source-skills-lock.json +311 -0
  23. package/src/backends/browser-tools.js +1 -1
  24. package/src/backends/index-command.js +1 -1
  25. package/src/backends/index-store.js +1 -1
  26. package/src/backends/memory-2026.8.31.json +34 -34
  27. package/src/backends/profiles.js +1 -1
  28. package/src/core/admission-fence.js +1 -1
  29. package/src/core/aso-import.js +1 -1
  30. package/src/core/caller-context.js +1 -1
  31. package/src/core/catalog.js +1 -1
  32. package/src/core/claude-caller-authority.js +1 -1
  33. package/src/core/claude-invocation.js +1 -1
  34. package/src/core/claude-native.js +1 -1
  35. package/src/core/claude-plan.js +1 -0
  36. package/src/core/claude-worker-transcript.js +1 -1
  37. package/src/core/codex-host-metadata.js +1 -1
  38. package/src/core/codex-transcript-receipt.js +1 -1
  39. package/src/core/context-metrics.js +1 -1
  40. package/src/core/doctor.js +1 -1
  41. package/src/core/draining-completion.js +1 -1
  42. package/src/core/execution.js +1 -1
  43. package/src/core/git-context.js +1 -0
  44. package/src/core/hook-bridge.js +1 -1
  45. package/src/core/host-adapters.js +1 -1
  46. package/src/core/ipc-envelope.js +1 -1
  47. package/src/core/memory-scope.js +1 -0
  48. package/src/core/memory-store.js +1 -1
  49. package/src/core/model-inventory.js +1 -1
  50. package/src/core/model-routing.js +1 -1
  51. package/src/core/native-dispatch.js +1 -1
  52. package/src/core/node-version.js +1 -1
  53. package/src/core/npm-cli.js +1 -1
  54. package/src/core/owned-command-child.js +1 -0
  55. package/src/core/owned-command.js +1 -0
  56. package/src/core/owned-lock.js +1 -1
  57. package/src/core/owned-process.js +1 -0
  58. package/src/core/presentations.js +1 -1
  59. package/src/core/quality-artifacts.js +1 -1
  60. package/src/core/quality.js +1 -1
  61. package/src/core/read-command.js +1 -0
  62. package/src/core/readonly-skill.js +1 -0
  63. package/src/core/resource-transaction.js +1 -1
  64. package/src/core/run-compatibility.js +1 -1
  65. package/src/core/runtime-info.js +1 -1
  66. package/src/core/runtime-ownership.js +1 -1
  67. package/src/core/session.js +1 -1
  68. package/src/core/skill-companions.js +1 -1
  69. package/src/core/skill-names.js +1 -1
  70. package/src/core/storage-retry.js +1 -0
  71. package/src/core/tool-contracts.js +1 -1
  72. package/src/core/update-control.js +1 -1
  73. package/src/core/upgrade-runs.js +1 -0
  74. package/src/core/upgrade-stop.js +1 -0
  75. package/src/core/windows-job.js +1 -0
  76. package/src/core/windows-job.ps1 +75 -0
  77. package/src/core/workspace-generation.js +1 -1
  78. package/src/core/workspace-path.js +1 -1
  79. package/src/installer/bounded-command.js +1 -1
  80. package/src/installer/candidate-preflight.js +1 -1
  81. package/src/installer/connection-activation.js +1 -1
  82. package/src/installer/connection-supervisor.js +1 -1
  83. package/src/installer/deployment-draft.js +1 -1
  84. package/src/installer/gateway-context.js +1 -1
  85. package/src/installer/gateway-migration.js +1 -1
  86. package/src/installer/gateway-runtime.js +1 -1
  87. package/src/installer/global-setup.js +1 -1
  88. package/src/installer/hook-context-client.js +1 -1
  89. package/src/installer/hook-dispatcher.js +51 -51
  90. package/src/installer/host-hooks.js +1 -1
  91. package/src/installer/managed-config.js +1 -1
  92. package/src/installer/platform-config.js +1 -1
  93. package/src/installer/prerequisites.js +1 -1
  94. package/src/installer/presentations.js +1 -1
  95. package/src/installer/project-setup.js +1 -1
  96. package/src/installer/registration-closure.js +1 -0
  97. package/src/installer/registration-plan.js +1 -1
  98. package/src/installer/registration-receipt.js +1 -1
  99. package/src/installer/registrations.js +1 -1
  100. package/src/installer/runtime-activation.js +1 -1
  101. package/src/installer/runtime-child.js +1 -1
  102. package/src/installer/runtime-launcher.js +50 -50
  103. package/src/installer/runtime-lock.js +1 -1
  104. package/src/installer/runtime-store.js +1 -1
  105. package/src/installer/runtime-supervisor.js +1 -1
  106. package/src/installer/setup-wizard.js +1 -1
  107. package/src/installer/update-addons.js +1 -1
  108. package/src/installer/update-executor.js +1 -1
  109. package/src/installer/workspace-registry.js +1 -1
  110. package/src/installer/workspace-transaction.js +1 -1
  111. package/src/installer/workspace-update.js +1 -1
  112. package/src/license/crypto.js +1 -1
  113. package/src/license/fingerprint.js +1 -1
  114. package/src/license/terms.js +1 -1
  115. package/src/license/verify.js +1 -1
  116. package/src/presets/index.js +1 -1
  117. package/src/proxy/backends.js +1 -1
  118. package/src/proxy/browser-sessions.js +1 -1
  119. package/src/proxy/core-tools.js +1 -1
  120. package/src/proxy/pipeline.js +1 -1
  121. package/src/proxy/public-catalog.js +1 -1
  122. package/src/proxy/router.config.js +1 -1
  123. package/src/proxy/router.js +1 -1
  124. package/src/proxy/server.js +1 -1
  125. package/src/proxy/workspace-gateway.js +1 -1
  126. package/technical-sources-check.js +249 -0
package/release-check.js CHANGED
@@ -6,8 +6,8 @@ const { spawn, spawnSync, execFileSync } = require('child_process');
6
6
  const assert = require('assert/strict');
7
7
 
8
8
  // Standalone: this file is also shipped as the signed dist prepublish gate.
9
- async function handshake(installed, workspace, fixture, realBackends = false, launcherArgs = [installed.launcherPath, '--path', workspace]) {
10
- const gateway = launcherArgs.includes('--gateway');
9
+ async function handshake(installed, workspace, fixture, realBackends = false, launcherArgs = [installed.launcherPath, '--path', workspace]) {
10
+ const gateway = launcherArgs.includes('--gateway');
11
11
  const child = spawn(process.execPath, ['--require', fixture, ...launcherArgs], {
12
12
  windowsHide: true,
13
13
  env: { ...process.env, APT_TEST_RELEASE: installed.path, APT_GATE_REAL: realBackends ? '1' : '0', MCP_SKIP_LICENSE_CHECK: '1', MCP_SKIP_INTEGRITY_CHECK: '0' },
@@ -17,14 +17,14 @@ async function handshake(installed, workspace, fixture, realBackends = false, la
17
17
  const checkBootstrappedWorkspace = message => {
18
18
  const content = message.result?.content?.find(item => item.type === 'text');
19
19
  assert.ok(content, 'Missing bootstrap result');
20
- const bootstrap = JSON.parse(content.text);
21
- const actual = bootstrap.workspace;
20
+ const bootstrap = JSON.parse(content.text);
21
+ const actual = bootstrap.workspace;
22
22
  const identity = value => process.platform === 'win32' ? path.resolve(value).toLowerCase() : path.resolve(value);
23
- assert.equal(identity(actual), identity(fs.realpathSync(workspace)), 'Launcher ignored its workspace binding');
24
- assert.equal(bootstrap.runtime.loadedVersion, installed.version, 'Bootstrap did not report the extracted runtime version');
25
- assert.equal(bootstrap.runtime.currentVersion, installed.version, 'Bootstrap read the wrong runtime root');
26
- assert.equal(bootstrap.runtime.currentDigest, installed.digest, 'Bootstrap read a different runtime pointer');
27
- assert.equal(bootstrap.runtime.bindingSource, 'explicit', 'Launcher lost the explicit --path binding');
23
+ assert.equal(identity(actual), identity(fs.realpathSync(workspace)), 'Launcher ignored its workspace binding');
24
+ assert.equal(bootstrap.runtime.loadedVersion, installed.version, 'Bootstrap did not report the extracted runtime version');
25
+ assert.equal(bootstrap.runtime.currentVersion, installed.version, 'Bootstrap read the wrong runtime root');
26
+ assert.equal(bootstrap.runtime.currentDigest, installed.digest, 'Bootstrap read a different runtime pointer');
27
+ assert.equal(bootstrap.runtime.bindingSource, 'explicit', 'Launcher lost the explicit --path binding');
28
28
  };
29
29
  const checks = realBackends ? [
30
30
  ['session_bootstrap', {sessionId:'package-gate'}, checkBootstrappedWorkspace],
@@ -44,8 +44,8 @@ async function handshake(installed, workspace, fixture, realBackends = false, la
44
44
  assert.equal(result.authorizesEdits, false);
45
45
  assert.notEqual(result.workflow, 'implement');
46
46
  }]);
47
- if (gateway) checks[0][1].workspacePath = workspace;
48
- let completed = 0;
47
+ if (gateway) checks[0][1].workspacePath = workspace;
48
+ let completed = 0;
49
49
  const send = message => child.stdin.write(JSON.stringify({ jsonrpc: '2.0', ...message }) + '\n');
50
50
  const next = () => {
51
51
  if (completed === checks.length) return child.stdin.end();
@@ -125,11 +125,11 @@ function verifyPackagedQualityGate(installed, temp) {
125
125
  fs.mkdirSync(folder, { recursive: true });
126
126
  fs.writeFileSync(path.join(folder, 'SKILL.md'), skill);
127
127
  }
128
- const manager = new PipelineManager(workspace);
129
- manager.env = { ...process.env }; delete manager.env.NODE_TEST_CONTEXT;
130
- const malformed = manager.start({ task: 'wrong-workspace', pipeline: 'readonly', workspace: workspace });
131
- assert.equal(malformed.code, 'INVALID_WORKSPACE');
132
- assert.equal(manager.pendingCreations('wrong-workspace').length, 0);
128
+ const manager = new PipelineManager(workspace);
129
+ manager.env = { ...process.env }; delete manager.env.NODE_TEST_CONTEXT;
130
+ const malformed = manager.start({ task: 'wrong-workspace', pipeline: 'readonly', workspace: workspace });
131
+ assert.equal(malformed.code, 'INVALID_WORKSPACE');
132
+ assert.equal(manager.pendingCreations('wrong-workspace').length, 0);
133
133
  const plan = { criteria: [{ id: 'adds', expectedOutcome: 'add(2,3) is 5', source: 'user-request', checkIds: ['add-test'] }],
134
134
  checks: [{ id: 'add-test', criterionIds: ['adds'], format: 'node-tap', testIds: ['adds'], required: true }],
135
135
  reviews: [{ id: 'technical', required: true }] };
@@ -144,7 +144,7 @@ function verifyPackagedQualityGate(installed, temp) {
144
144
  const lowered = start({ task: 'web-lowered', qualityPlan: plan, productImpact: false });
145
145
  assert.equal(lowered.code, 'ACCEPTANCE_ALREADY_ACTIVE');
146
146
  assert.equal(lowered.task, 'web-quality');
147
- assert.equal(manager.reset({ task: 'web-quality', runId: routed.runId, sessionId: 'package-quality', confirm: true }).success, true);
147
+ assert.equal(manager.reset({ task: 'web-quality', runId: routed.runId, sessionId: 'package-quality', confirm: true }).success, true);
148
148
  const started = start({ task: 'functional-quality', qualityPlan: plan });
149
149
  assert.equal(started.success, true, JSON.stringify(started));
150
150
  const base = { task: 'functional-quality', runId: started.runId, sessionId: 'package-quality' };
@@ -207,7 +207,7 @@ async function main() {
207
207
  const archive = value('--package') ? path.resolve(value('--package')) : null;
208
208
  if (!dist && !archive) {
209
209
  const build = path.join(temp, 'build'); fs.mkdirSync(build);
210
- for (const item of ['src', 'bin', 'scripts', '.agents', 'docs', 'test', 'package.json', 'package-lock.json', 'README.md', 'LICENSE', '.npmignore']) {
210
+ for (const item of ['src', 'bin', 'scripts', '.agents', 'docs', 'test', 'package.json', 'package-lock.json', 'skills-lock.json', 'README.md', 'LICENSE', '.npmignore']) {
211
211
  fs.cpSync(path.join(root, item), path.join(build, item), { recursive: true });
212
212
  }
213
213
  // Dependencies only; no source fallback and no mutation of the live checkout.
@@ -237,38 +237,43 @@ async function main() {
237
237
  }
238
238
  execFileSync('tar', ['-xzf', archive || path.join(temp, packed[0].filename), '-C', temp], { windowsHide: true });
239
239
  const pkg = path.join(temp, 'package');
240
- if (!publicKey) publicKey = require(path.join(pkg, 'src/license/verify.js')).PRODUCTION_PUBLIC_KEY;
241
- const installer = require(path.join(pkg, 'src/installer/runtime-store.js'));
242
- const hostConfig = require(path.join(pkg, 'src/installer/platform-config.js'));
240
+ // npm packages expose signed runtime files under dist/ while development
241
+ // copies keep the same files at the repository root.
242
+ const runtimePackage = fs.existsSync(path.join(pkg, 'integrity-manifest.json')) ? pkg : path.join(pkg, 'dist');
243
+ const sourceReport = require(path.join(runtimePackage, 'technical-sources-check.js')).validate({ root: runtimePackage, packageOnly: true });
244
+ assert.equal(sourceReport.ok, true, `Packaged technical source metadata drift: ${sourceReport.errors.join('; ')}`);
245
+ if (!publicKey) publicKey = require(path.join(runtimePackage, 'src/license/verify.js')).PRODUCTION_PUBLIC_KEY;
246
+ const installer = require(path.join(runtimePackage, 'src/installer/runtime-store.js'));
247
+ const hostConfig = require(path.join(runtimePackage, 'src/installer/platform-config.js'));
243
248
  const runtimeRoot = path.join(temp, 'runtime tiếng Việt');
244
- const installed = installer.installRuntime(pkg, { root: runtimeRoot, publicKey });
249
+ const installed = installer.installRuntime(runtimePackage, { root: runtimeRoot, publicKey });
245
250
  verifyPackagedQualityGate(installed, temp);
246
- const globalConfig = path.join(temp, 'antigravity-global.json');
247
- process.env.APT_REGISTRATION_RECEIPT_ROOT = path.join(temp, 'registration-receipts');
248
- process.env.APT_WORKSPACE_REGISTRY_ROOT = path.join(temp, 'workspace-registry');
249
- const workspaceA = path.join(temp, 'workspace A');
250
- const workspaceB = path.join(temp, 'workspace B');
251
- fs.mkdirSync(workspaceA); fs.mkdirSync(workspaceB);
252
- const activationWorkspace = path.join(temp, 'runtime activation');
253
- const activationRun = path.join(activationWorkspace, '.agents', 'pipelines', 'unfinished', 'runs', 'run', 'state.json');
254
- fs.mkdirSync(path.dirname(activationRun), { recursive: true });
255
- fs.writeFileSync(path.join(activationWorkspace, '.agents', 'manifest.json'), JSON.stringify({ version: installed.version }));
256
- fs.writeFileSync(activationRun, JSON.stringify({ task: 'unfinished', schemaVersion: 2, status: 'active' }));
257
- const canonicalActivation = fs.realpathSync(activationWorkspace);
258
- const activationKey = process.platform === 'win32' ? canonicalActivation.toLowerCase() : canonicalActivation;
259
- const activationPin = path.join(runtimeRoot, 'workspaces', `${crypto.createHash('sha256').update(activationKey).digest('hex')}.json`);
260
- fs.mkdirSync(path.dirname(activationPin), { recursive: true });
261
- fs.writeFileSync(activationPin, JSON.stringify({ version: '3.0.2', digest: 'b'.repeat(64) }));
262
- const activation = require(path.join(pkg, 'src/installer/runtime-activation.js')).inspectRuntimeActivation(activationWorkspace, { runtimeRoot });
263
- // An unfinished run alone does not pin the entire workspace to the old
264
- // engine. The old disk pin still requires a new serving connection.
265
- assert.equal(activation.activationStatus, 'pending-reconnect');
266
- assert.equal(activation.activeRuns, 1);
267
- assert.equal(JSON.parse(fs.readFileSync(activationPin)).version, '3.0.2');
268
- hostConfig.deployProjectConfig('claude', workspaceA, installed.launcherPath);
269
- assert.equal(fs.existsSync(path.join(workspaceA, '.mcp.json')), false, 'project setup must not add a second MCP entry');
270
- const { buildHookConfig } = require(path.join(pkg, 'src/core/host-adapters.js'));
271
- const claudeHooks = buildHookConfig('claude-code', path.join(pkg, 'src/core/hook-bridge.js'), workspaceA).config.hooks;
251
+ const globalConfig = path.join(temp, 'antigravity-global.json');
252
+ process.env.APT_REGISTRATION_RECEIPT_ROOT = path.join(temp, 'registration-receipts');
253
+ process.env.APT_WORKSPACE_REGISTRY_ROOT = path.join(temp, 'workspace-registry');
254
+ const workspaceA = path.join(temp, 'workspace A');
255
+ const workspaceB = path.join(temp, 'workspace B');
256
+ fs.mkdirSync(workspaceA); fs.mkdirSync(workspaceB);
257
+ const activationWorkspace = path.join(temp, 'runtime activation');
258
+ const activationRun = path.join(activationWorkspace, '.agents', 'pipelines', 'unfinished', 'runs', 'run', 'state.json');
259
+ fs.mkdirSync(path.dirname(activationRun), { recursive: true });
260
+ fs.writeFileSync(path.join(activationWorkspace, '.agents', 'manifest.json'), JSON.stringify({ version: installed.version }));
261
+ fs.writeFileSync(activationRun, JSON.stringify({ task: 'unfinished', schemaVersion: 2, status: 'active' }));
262
+ const canonicalActivation = fs.realpathSync(activationWorkspace);
263
+ const activationKey = process.platform === 'win32' ? canonicalActivation.toLowerCase() : canonicalActivation;
264
+ const activationPin = path.join(runtimeRoot, 'workspaces', `${crypto.createHash('sha256').update(activationKey).digest('hex')}.json`);
265
+ fs.mkdirSync(path.dirname(activationPin), { recursive: true });
266
+ fs.writeFileSync(activationPin, JSON.stringify({ version: '3.0.2', digest: 'b'.repeat(64) }));
267
+ const activation = require(path.join(runtimePackage, 'src/installer/runtime-activation.js')).inspectRuntimeActivation(activationWorkspace, { runtimeRoot });
268
+ // An unfinished run alone does not pin the entire workspace to the old
269
+ // engine. The old disk pin still requires a new serving connection.
270
+ assert.equal(activation.activationStatus, 'pending-reconnect');
271
+ assert.equal(activation.activeRuns, 1);
272
+ assert.equal(JSON.parse(fs.readFileSync(activationPin)).version, '3.0.2');
273
+ hostConfig.deployProjectConfig('claude', workspaceA, installed.launcherPath);
274
+ assert.equal(fs.existsSync(path.join(workspaceA, '.mcp.json')), false, 'project setup must not add a second MCP entry');
275
+ const { buildHookConfig } = require(path.join(runtimePackage, 'src/core/host-adapters.js'));
276
+ const claudeHooks = buildHookConfig('claude-code', path.join(runtimePackage, 'src/core/hook-bridge.js'), workspaceA).config.hooks;
272
277
  for (const event of ['SessionStart', 'PreToolUse']) {
273
278
  const handler = claudeHooks[event][0].hooks[0];
274
279
  assert.equal(handler.command, 'node');
@@ -279,7 +284,7 @@ async function main() {
279
284
  assert.equal(result.status, 0, `${event}: ${result.stderr}`);
280
285
  assert.ok(JSON.parse(result.stdout));
281
286
  }
282
- const { SessionRuntime } = require(path.join(pkg, 'src/core/session.js'));
287
+ const { SessionRuntime } = require(path.join(runtimePackage, 'src/core/session.js'));
283
288
  const claudeSession = new SessionRuntime(workspaceA).status({ sessionId: 'claude-package-gate' });
284
289
  assert.deepEqual(claudeSession.hookObservations['claude-code'].events.sort(), ['PreToolUse', 'SessionStart']);
285
290
  fs.writeFileSync(globalConfig, JSON.stringify({ mcpServers: { custom: { command: 'custom' } } }));
@@ -287,17 +292,17 @@ async function main() {
287
292
  hostConfig.deployProjectConfig('antigravity', workspacePath, installed.launcherPath);
288
293
  hostConfig.configureIDE('antigravity', installed.launcherPath, { configPathOverride: globalConfig, projectPath: workspacePath });
289
294
  }
290
- const globalServers = JSON.parse(fs.readFileSync(globalConfig, 'utf8')).mcpServers;
291
- assert.deepEqual(Object.keys(globalServers).sort(), ['apt-mcp-agent', 'custom']);
292
- assert.deepEqual(globalServers['apt-mcp-agent'].args, [installed.launcherPath.replace(/\\/g, '/'), '--gateway', '--host', 'antigravity']);
293
- const enrolled = new (require(path.join(pkg, 'src/installer/workspace-registry.js')).WorkspaceRegistry)().list();
294
- assert.equal(enrolled.length, 2);
295
+ const globalServers = JSON.parse(fs.readFileSync(globalConfig, 'utf8')).mcpServers;
296
+ assert.deepEqual(Object.keys(globalServers).sort(), ['apt-mcp-agent', 'custom']);
297
+ assert.deepEqual(globalServers['apt-mcp-agent'].args, [installed.launcherPath.replace(/\\/g, '/'), '--gateway', '--host', 'antigravity']);
298
+ const enrolled = new (require(path.join(runtimePackage, 'src/installer/workspace-registry.js')).WorkspaceRegistry)().list();
299
+ assert.equal(enrolled.length, 2);
295
300
  assert.equal(globalServers.custom.command, 'custom');
296
- const packageHook = require(path.join(pkg, 'src/core/hook-bridge.js'));
297
- const packageLicense = require(path.join(pkg, 'src/license/verify.js'));
298
- const savedPublicKey = packageLicense.PRODUCTION_PUBLIC_KEY;
299
- const savedGlobalConfig = hostConfig.IDE_REGISTRY.antigravity.globalConfig;
300
- hostConfig.IDE_REGISTRY.antigravity.globalConfig = () => globalConfig;
301
+ const packageHook = require(path.join(runtimePackage, 'src/core/hook-bridge.js'));
302
+ const packageLicense = require(path.join(runtimePackage, 'src/license/verify.js'));
303
+ const savedPublicKey = packageLicense.PRODUCTION_PUBLIC_KEY;
304
+ const savedGlobalConfig = hostConfig.IDE_REGISTRY.antigravity.globalConfig;
305
+ hostConfig.IDE_REGISTRY.antigravity.globalConfig = () => globalConfig;
301
306
  packageLicense.PRODUCTION_PUBLIC_KEY = publicKey;
302
307
  try {
303
308
  const signedCli = path.join(installed.path, 'bin/cli.js').replace(/\\/g, '/');
@@ -310,12 +315,12 @@ async function main() {
310
315
  assert.equal(packageHook.isWriteTool('run_command', { command: 'npm test 2>&1 > sample.js' }, workspaceA), true);
311
316
  assert.equal(packageHook.isWriteTool('run_command', { command: `node "${signedCli}" update --project .` }, workspaceA), true);
312
317
  assert.equal(packageHook.isWriteTool('run_command', { command: `node "${signedCli}" doctor --project .; echo unsafe` }, workspaceA), true);
313
- } finally {
314
- packageLicense.PRODUCTION_PUBLIC_KEY = savedPublicKey;
315
- hostConfig.IDE_REGISTRY.antigravity.globalConfig = savedGlobalConfig;
316
- }
317
- for (const workspacePath of [workspaceA, workspaceB])
318
- assert.equal(fs.existsSync(path.join(workspacePath, '.agents/mcp_config.json')), false);
318
+ } finally {
319
+ packageLicense.PRODUCTION_PUBLIC_KEY = savedPublicKey;
320
+ hostConfig.IDE_REGISTRY.antigravity.globalConfig = savedGlobalConfig;
321
+ }
322
+ for (const workspacePath of [workspaceA, workspaceB])
323
+ assert.equal(fs.existsSync(path.join(workspacePath, '.agents/mcp_config.json')), false);
319
324
  const metadataWorkspace = path.join(temp, 'codex metadata workspace');
320
325
  fs.mkdirSync(metadataWorkspace);
321
326
  const metadataScript = path.join(temp, 'codex-metadata-fixture.js');
@@ -364,16 +369,16 @@ async function main() {
364
369
  if (file === path.join(root, 'src/proxy/server.js')) result.ProxyServer.prototype.checkLatestVersion = async () => {};
365
370
  return result;
366
371
  };`);
367
- for (const [index, workspacePath] of [workspaceA, workspaceB].entries()) {
368
- await handshake(installed, workspacePath, fixture, false, globalServers['apt-mcp-agent'].args);
369
- }
370
- // Legacy direct launch compatibility is a package gate, not a Claude native grant test.
371
- await handshake(installed, workspaceA, fixture);
372
+ for (const [index, workspacePath] of [workspaceA, workspaceB].entries()) {
373
+ await handshake(installed, workspacePath, fixture, false, globalServers['apt-mcp-agent'].args);
374
+ }
375
+ // Legacy direct launch compatibility is a package gate, not a Claude native grant test.
376
+ await handshake(installed, workspaceA, fixture);
372
377
  await handshake(installed, workspace, fixture);
373
378
  const good = fs.readFileSync(installed.launcherPath);
374
379
  for (const old of ['_0x5e52();', "require('./server.js');"]) {
375
380
  fs.writeFileSync(installed.launcherPath, old);
376
- installer.installRuntime(pkg, { root: runtimeRoot, publicKey });
381
+ installer.installRuntime(runtimePackage, { root: runtimeRoot, publicKey });
377
382
  assert.ok(fs.readFileSync(installed.launcherPath).equals(good));
378
383
  const backup = path.join(runtimeRoot, 'launcher-backups', crypto.createHash('sha256').update(old).digest('hex') + '.js');
379
384
  assert.equal(fs.readFileSync(backup, 'utf8'), old);
@@ -0,0 +1,311 @@
1
+ {
2
+ "version": 1,
3
+ "skills": {
4
+ "ask-matt": {
5
+ "source": "mattpocock/skills",
6
+ "sourceType": "github",
7
+ "skillPath": "skills/engineering/ask-matt/SKILL.md",
8
+ "computedHash": "f4e28e0661d7133787329d250b458bb6b372aaa2f2f019c5c707c9b5a44b7612"
9
+ },
10
+ "caveman": {
11
+ "source": "mattpocock/skills",
12
+ "sourceType": "github",
13
+ "skillPath": "skills/productivity/caveman/SKILL.md",
14
+ "computedHash": "536908fcfcb232600a5875aa85f1fd50fd13305e9d67379bcd95f07c8c916f3f"
15
+ },
16
+ "codebase-design": {
17
+ "source": "mattpocock/skills",
18
+ "sourceType": "github",
19
+ "skillPath": "skills/engineering/codebase-design/SKILL.md",
20
+ "computedHash": "c20e6e42a3034e553b1919fe94cf0928f0ff3c693fd5df802998dce7a4724eaf"
21
+ },
22
+ "decision-mapping": {
23
+ "source": "mattpocock/skills",
24
+ "sourceType": "github",
25
+ "skillPath": "skills/in-progress/decision-mapping/SKILL.md",
26
+ "computedHash": "ee24375d97fdf6eeb14def6480ab577b75c7e1bfdf62290f8636bd1fdc63cb1a"
27
+ },
28
+ "design-an-interface": {
29
+ "source": "mattpocock/skills",
30
+ "sourceType": "github",
31
+ "skillPath": "skills/deprecated/design-an-interface/SKILL.md",
32
+ "computedHash": "f3f225914515407b8224e8ec6187db337c5e65bad0703936a0acb3f802947a7d"
33
+ },
34
+ "design-taste-frontend": {
35
+ "source": "Leonxlnx/taste-skill",
36
+ "sourceType": "github",
37
+ "skillPath": "skills/taste-skill/SKILL.md",
38
+ "computedHash": "899b84384f74f540ea5284d9b2e9234e050998b42eacc805410b518d4226c0b3"
39
+ },
40
+ "diagnose": {
41
+ "source": "mattpocock/skills",
42
+ "sourceType": "github",
43
+ "skillPath": "skills/engineering/diagnose/SKILL.md",
44
+ "computedHash": "1c3c85517ac42116fe5f2bfb5150f7b3e38ad23808e40b33fbb01f1afb611983"
45
+ },
46
+ "diagnosing-bugs": {
47
+ "source": "mattpocock/skills",
48
+ "sourceType": "github",
49
+ "skillPath": "skills/engineering/diagnosing-bugs/SKILL.md",
50
+ "computedHash": "c8743c51df3760039b2dcb8a5a61437da3128c6efb4c5381734a3f05403e9a84"
51
+ },
52
+ "domain-modeling": {
53
+ "source": "mattpocock/skills",
54
+ "sourceType": "github",
55
+ "skillPath": "skills/engineering/domain-modeling/SKILL.md",
56
+ "computedHash": "65da9ce611a203fc6b9ecf95254cf845857243d958cb0d64df556cad87c76312"
57
+ },
58
+ "edit-article": {
59
+ "source": "mattpocock/skills",
60
+ "sourceType": "github",
61
+ "skillPath": "skills/personal/edit-article/SKILL.md",
62
+ "computedHash": "9a96975e2eaf1ce5c69c14429aea7d2039e2f6f5a73938520b653de84841d9e3"
63
+ },
64
+ "flutter-add-integration-test": {
65
+ "source": "flutter/skills",
66
+ "sourceType": "github",
67
+ "skillPath": "skills/flutter-add-integration-test/SKILL.md",
68
+ "computedHash": "4246d3ef5f21bdb7945899056b99cf3863e2bff645a132b41634caaded68da6d"
69
+ },
70
+ "flutter-add-widget-preview": {
71
+ "source": "flutter/skills",
72
+ "sourceType": "github",
73
+ "skillPath": "skills/flutter-add-widget-preview/SKILL.md",
74
+ "computedHash": "369ed3ebdc1f81ee337551ad1d1dd9ec6e768ed2bdf65d32ad442117a6ba79b6"
75
+ },
76
+ "flutter-add-widget-test": {
77
+ "source": "flutter/skills",
78
+ "sourceType": "github",
79
+ "skillPath": "skills/flutter-add-widget-test/SKILL.md",
80
+ "computedHash": "f4ea905ae155d1bca76f5431bf6ed31f31e3d40146493e7ae4285eac39ba4ffd"
81
+ },
82
+ "flutter-apply-architecture-best-practices": {
83
+ "source": "flutter/skills",
84
+ "sourceType": "github",
85
+ "skillPath": "skills/flutter-apply-architecture-best-practices/SKILL.md",
86
+ "computedHash": "baeb208b1cab90c559677626dbd101b96ba93f803cbed85122abdadeb3283a8b"
87
+ },
88
+ "flutter-build-responsive-layout": {
89
+ "source": "flutter/skills",
90
+ "sourceType": "github",
91
+ "skillPath": "skills/flutter-build-responsive-layout/SKILL.md",
92
+ "computedHash": "6d74a9504c4e355c4c62f6fcb6c6dc0df67b56dd6616bea199e4e58f75b7729b"
93
+ },
94
+ "flutter-fix-layout-issues": {
95
+ "source": "flutter/skills",
96
+ "sourceType": "github",
97
+ "skillPath": "skills/flutter-fix-layout-issues/SKILL.md",
98
+ "computedHash": "b2f9789451224e6df8d1d7ac63854c2f1beb30fa35d13ea06fbae9ba2b1b0a7f"
99
+ },
100
+ "flutter-implement-json-serialization": {
101
+ "source": "flutter/skills",
102
+ "sourceType": "github",
103
+ "skillPath": "skills/flutter-implement-json-serialization/SKILL.md",
104
+ "computedHash": "c2cf46854472a452dafa11f862f2bca3d9fe7286a5bb45d85b1efbcebc74b74e"
105
+ },
106
+ "flutter-setup-declarative-routing": {
107
+ "source": "flutter/skills",
108
+ "sourceType": "github",
109
+ "skillPath": "skills/flutter-setup-declarative-routing/SKILL.md",
110
+ "computedHash": "4c2ed2fd729230be581b15d84741688e206632fb2b38af320060cd3518b91179"
111
+ },
112
+ "flutter-setup-localization": {
113
+ "source": "flutter/skills",
114
+ "sourceType": "github",
115
+ "skillPath": "skills/flutter-setup-localization/SKILL.md",
116
+ "computedHash": "fc0811b1b775c52c1b8f7df600f5c52b83029aea0586b8cc55169812affd408f"
117
+ },
118
+ "flutter-use-http-package": {
119
+ "source": "flutter/skills",
120
+ "sourceType": "github",
121
+ "skillPath": "skills/flutter-use-http-package/SKILL.md",
122
+ "computedHash": "bd169b5cee731751f3b32f43c94cfe9495fc8e6c3eb621b785c69e38b77d0e19"
123
+ },
124
+ "git-guardrails-claude-code": {
125
+ "source": "mattpocock/skills",
126
+ "sourceType": "github",
127
+ "skillPath": "skills/misc/git-guardrails-claude-code/SKILL.md",
128
+ "computedHash": "a04bf71be9abc44ca3b00e2f1740b37d2e471abadd20d43a31bccff7135baedf"
129
+ },
130
+ "grill-me": {
131
+ "source": "mattpocock/skills",
132
+ "sourceType": "github",
133
+ "skillPath": "skills/productivity/grill-me/SKILL.md",
134
+ "computedHash": "67e31b63e6e9e454cc2f51cd85b9cf1396ee46379a87c07a1450f33c47c1276a"
135
+ },
136
+ "grill-with-docs": {
137
+ "source": "mattpocock/skills",
138
+ "sourceType": "github",
139
+ "skillPath": "skills/engineering/grill-with-docs/SKILL.md",
140
+ "computedHash": "559d4de044394b86af53a5cedd2d3a689770088c3c5361646c91f5d7ea59f78a"
141
+ },
142
+ "grilling": {
143
+ "source": "mattpocock/skills",
144
+ "sourceType": "github",
145
+ "skillPath": "skills/productivity/grilling/SKILL.md",
146
+ "computedHash": "32f747941943e607b2dfc86a46b2284dd3e101332eafafd7569389efbe848f81"
147
+ },
148
+ "handoff": {
149
+ "source": "mattpocock/skills",
150
+ "sourceType": "github",
151
+ "skillPath": "skills/productivity/handoff/SKILL.md",
152
+ "computedHash": "b7c38b5061b73217e5478f9446fc403be17ce311d4c23a108cc37b5b4604fa37"
153
+ },
154
+ "imagegen-frontend-mobile": {
155
+ "source": "Leonxlnx/taste-skill",
156
+ "sourceType": "github",
157
+ "skillPath": "skills/imagegen-frontend-mobile/SKILL.md",
158
+ "computedHash": "7c1d1dc59cd0df4063b8621af543bf5dea1d576b261507e17b0323c69680b048"
159
+ },
160
+ "imagegen-frontend-web": {
161
+ "source": "Leonxlnx/taste-skill",
162
+ "sourceType": "github",
163
+ "skillPath": "skills/imagegen-frontend-web/SKILL.md",
164
+ "computedHash": "27255c7c50181e58add156b2aa2bd5325285b85f04027e4c8b73742d98d7be0a"
165
+ },
166
+ "implement": {
167
+ "source": "mattpocock/skills",
168
+ "sourceType": "github",
169
+ "skillPath": "skills/engineering/implement/SKILL.md",
170
+ "computedHash": "a29d88494f7365d9df383b22a1df8411088d636d6c328f4a6e11d039143d166f"
171
+ },
172
+ "improve-codebase-architecture": {
173
+ "source": "mattpocock/skills",
174
+ "sourceType": "github",
175
+ "skillPath": "skills/engineering/improve-codebase-architecture/SKILL.md",
176
+ "computedHash": "4c4d2b6da48482c1a054aca0e09eafd61cdcbebe2bda10abd3f355bf5f6fc57c"
177
+ },
178
+ "migrate-to-shoehorn": {
179
+ "source": "mattpocock/skills",
180
+ "sourceType": "github",
181
+ "skillPath": "skills/misc/migrate-to-shoehorn/SKILL.md",
182
+ "computedHash": "67fdd18f8f4f7c89b3003eb944220679272738c1deb680719fd2e282495d87f4"
183
+ },
184
+ "obsidian-vault": {
185
+ "source": "mattpocock/skills",
186
+ "sourceType": "github",
187
+ "skillPath": "skills/personal/obsidian-vault/SKILL.md",
188
+ "computedHash": "a5dd44e7af2bfeb2cb2e3f421fdccef62dd334038ad06e18767b0ddcf0e75c13"
189
+ },
190
+ "prototype": {
191
+ "source": "mattpocock/skills",
192
+ "sourceType": "github",
193
+ "skillPath": "skills/engineering/prototype/SKILL.md",
194
+ "computedHash": "7bbb6ed6a73eb555026a79cc29e3ff9b26765637109f8974aba6c6f86cff85e6"
195
+ },
196
+ "qa": {
197
+ "source": "mattpocock/skills",
198
+ "sourceType": "github",
199
+ "skillPath": "skills/deprecated/qa/SKILL.md",
200
+ "computedHash": "a608d889794ef7f21a5dd31d96ca502b5e6f27b466ada759a3bf9846a2e6b236"
201
+ },
202
+ "request-refactor-plan": {
203
+ "source": "mattpocock/skills",
204
+ "sourceType": "github",
205
+ "skillPath": "skills/deprecated/request-refactor-plan/SKILL.md",
206
+ "computedHash": "6811250488d1dafcb111e7ef0dc1124211369c5f6f47ce820b7527c255489178"
207
+ },
208
+ "resolving-merge-conflicts": {
209
+ "source": "mattpocock/skills",
210
+ "sourceType": "github",
211
+ "skillPath": "skills/engineering/resolving-merge-conflicts/SKILL.md",
212
+ "computedHash": "9050aa34dc026b5b28f5b63003a8742d0669daa6b2916c7a0f082ca9bfa50184"
213
+ },
214
+ "review": {
215
+ "source": "mattpocock/skills",
216
+ "sourceType": "github",
217
+ "skillPath": "skills/in-progress/review/SKILL.md",
218
+ "computedHash": "270e0e7151ccd0b9623163396e1137a7fe013e0e1a07fd02ca03ead4efdcc21c"
219
+ },
220
+ "scaffold-exercises": {
221
+ "source": "mattpocock/skills",
222
+ "sourceType": "github",
223
+ "skillPath": "skills/misc/scaffold-exercises/SKILL.md",
224
+ "computedHash": "1127f69a77b48cb855067db4c9c42e7638e6672f1cb3fafb0ffd61a1ecdfae70"
225
+ },
226
+ "setup-matt-pocock-skills": {
227
+ "source": "mattpocock/skills",
228
+ "sourceType": "github",
229
+ "skillPath": "skills/engineering/setup-matt-pocock-skills/SKILL.md",
230
+ "computedHash": "cbca37faf13eba4a3dfcd87be19c5d5580e0c89dfffddf7748b5d6d7b96e57cf"
231
+ },
232
+ "setup-pre-commit": {
233
+ "source": "mattpocock/skills",
234
+ "sourceType": "github",
235
+ "skillPath": "skills/misc/setup-pre-commit/SKILL.md",
236
+ "computedHash": "f2ce8663857d919cf7e4146cd716b0aee1757b85123b758e6e7d98fcbaf14054"
237
+ },
238
+ "tdd": {
239
+ "source": "mattpocock/skills",
240
+ "sourceType": "github",
241
+ "skillPath": "skills/engineering/tdd/SKILL.md",
242
+ "computedHash": "5d94c0930f58405485bbac1f7bb2dce7ed833702257912a63dcaf03c8e83d78e"
243
+ },
244
+ "teach": {
245
+ "source": "mattpocock/skills",
246
+ "sourceType": "github",
247
+ "skillPath": "skills/productivity/teach/SKILL.md",
248
+ "computedHash": "25bf44a1302ef009772c8e66d14a705672897562659c43650b1468012baa4f8d"
249
+ },
250
+ "to-issues": {
251
+ "source": "mattpocock/skills",
252
+ "sourceType": "github",
253
+ "skillPath": "skills/engineering/to-issues/SKILL.md",
254
+ "computedHash": "c1bfbb12c04ebfc14225a5553ec95acc42a57d09ae78e58377c648107b9605ed"
255
+ },
256
+ "to-prd": {
257
+ "source": "mattpocock/skills",
258
+ "sourceType": "github",
259
+ "skillPath": "skills/engineering/to-prd/SKILL.md",
260
+ "computedHash": "7e1950ebb84721293b913d54481e0723172abb23fa5e0d0d488594ca45ffb421"
261
+ },
262
+ "triage": {
263
+ "source": "mattpocock/skills",
264
+ "sourceType": "github",
265
+ "skillPath": "skills/engineering/triage/SKILL.md",
266
+ "computedHash": "7caa274494d702d8c668d1ff17267b4a69b6d58e34a00c20b2df9de67ef6edc9"
267
+ },
268
+ "ubiquitous-language": {
269
+ "source": "mattpocock/skills",
270
+ "sourceType": "github",
271
+ "skillPath": "skills/deprecated/ubiquitous-language/SKILL.md",
272
+ "computedHash": "4828c4957014e7d9c1fd62d65e92264d6d46808089953e14d1bbba5a92dfff4d"
273
+ },
274
+ "write-a-skill": {
275
+ "source": "mattpocock/skills",
276
+ "sourceType": "github",
277
+ "skillPath": "skills/productivity/write-a-skill/SKILL.md",
278
+ "computedHash": "3b58a16bde08f84ed490cd449ecdc40289216d660e070c485f53bc2d1ed2b843"
279
+ },
280
+ "writing-beats": {
281
+ "source": "mattpocock/skills",
282
+ "sourceType": "github",
283
+ "skillPath": "skills/in-progress/writing-beats/SKILL.md",
284
+ "computedHash": "b416f5b8d349d40c604ca2fd1d1664e8672c236e188fa524ae4e8db5a8174580"
285
+ },
286
+ "writing-fragments": {
287
+ "source": "mattpocock/skills",
288
+ "sourceType": "github",
289
+ "skillPath": "skills/in-progress/writing-fragments/SKILL.md",
290
+ "computedHash": "248bdd9334033ab044dfe29458866f9b2353a8006416e00d1058a3914981ae6e"
291
+ },
292
+ "writing-great-skills": {
293
+ "source": "mattpocock/skills",
294
+ "sourceType": "github",
295
+ "skillPath": "skills/productivity/writing-great-skills/SKILL.md",
296
+ "computedHash": "ffd2c48fa793cce626b7af00dfd6e353529e69cac4818d24f262ce4b512ee3cc"
297
+ },
298
+ "writing-shape": {
299
+ "source": "mattpocock/skills",
300
+ "sourceType": "github",
301
+ "skillPath": "skills/in-progress/writing-shape/SKILL.md",
302
+ "computedHash": "db0659096afcae5bfe7d913e46c1dc1f49357d7b362791613fe5f62fcc00daf7"
303
+ },
304
+ "zoom-out": {
305
+ "source": "mattpocock/skills",
306
+ "sourceType": "github",
307
+ "skillPath": "skills/engineering/zoom-out/SKILL.md",
308
+ "computedHash": "a8b8ed45609fdfa9f184d0c9f69326e43822a42eebea14db2792d777373de562"
309
+ }
310
+ }
311
+ }
@@ -1 +1 @@
1
- const _0xb5c248=_0x2987;(function(_0x2424bc,_0x438c2e){const _0x347bca=_0x2987,_0x5c3d34=_0x2424bc();while(!![]){try{const _0x37acd6=-parseInt(_0x347bca(0xab))/0x1+-parseInt(_0x347bca(0xaf))/0x2*(parseInt(_0x347bca(0xae))/0x3)+parseInt(_0x347bca(0xa7))/0x4+-parseInt(_0x347bca(0xb8))/0x5*(-parseInt(_0x347bca(0xb5))/0x6)+-parseInt(_0x347bca(0xb6))/0x7+parseInt(_0x347bca(0xaa))/0x8*(-parseInt(_0x347bca(0xb0))/0x9)+-parseInt(_0x347bca(0xb1))/0xa*(-parseInt(_0x347bca(0xac))/0xb);if(_0x37acd6===_0x438c2e)break;else _0x5c3d34['push'](_0x5c3d34['shift']());}catch(_0x3124dd){_0x5c3d34['push'](_0x5c3d34['shift']());}}}(_0x1079,0xaac92));function _0x1079(){const _0x22fbcd=['mZu5me5MBhbsyW','zgvZy3jPChrPB24','v29YA2vYigLKzw50Axr5oYbKzwzHDwX0CYb0BYbJB29YzgLUyxrVCI4','lI9ICM93C2vYlxrVB2XZltaUmc44mI5QC29U','nJiXmfzTtw1KEa','mZi3mJqWmMrjsgLewG','DhLWzq','mJuYmezrwe1TDq','zxHWB3j0CW','yxb0vgfZAW','ChjVCgvYDgLLCW','BwfW','u3rHyMXLihrHC2SGAwrLBNrPDhK7ihjLDxnLigzVCIb0AgLZihrHC2SU','nduXnJeWogHdzw9eqq','C3rYAw5N','CMvXDwLYzwq','mtyWs1bctK96','odGXntiWz3DKv3nu','nJy0mdDryNbPsKC','Aw5WDxrty2HLBwe','nJuZnti2Egvzuuvy','nMPMqxrPza','ntaYmtq2A0n5DwPz'];_0x1079=function(){return _0x22fbcd;};return _0x1079();}const {tools}=require(_0xb5c248(0xb4)),_0x84c4f3={};_0x84c4f3[_0xb5c248(0xb7)]='string',_0x84c4f3[_0xb5c248(0xb2)]=_0xb5c248(0xbd);const _0xc69b09={};function _0x2987(_0x49b953,_0x2bff7e){_0x49b953=_0x49b953-0xa7;const _0x1079fd=_0x1079();let _0x298758=_0x1079fd[_0x49b953];if(_0x2987['xEXluw']===undefined){var _0x3ba5c6=function(_0xeb4762){const _0x20f353='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x84c4f3='',_0xc69b09='';for(let _0x118774=0x0,_0x3f8851,_0x11a5b3,_0x196ac3=0x0;_0x11a5b3=_0xeb4762['charAt'](_0x196ac3++);~_0x11a5b3&&(_0x3f8851=_0x118774%0x4?_0x3f8851*0x40+_0x11a5b3:_0x11a5b3,_0x118774++%0x4)?_0x84c4f3+=String['fromCharCode'](0xff&_0x3f8851>>(-0x2*_0x118774&0x6)):0x0){_0x11a5b3=_0x20f353['indexOf'](_0x11a5b3);}for(let _0x562a19=0x0,_0x417724=_0x84c4f3['length'];_0x562a19<_0x417724;_0x562a19++){_0xc69b09+='%'+('00'+_0x84c4f3['charCodeAt'](_0x562a19)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xc69b09);};_0x2987['OcKFYd']=_0x3ba5c6,_0x2987['LhpjDS']={},_0x2987['xEXluw']=!![];}const _0x4675ef=_0x1079fd[0x0],_0x5300e2=_0x49b953+_0x4675ef,_0x4d12cf=_0x2987['LhpjDS'][_0x5300e2];return!_0x4d12cf?(_0x298758=_0x2987['OcKFYd'](_0x298758),_0x2987['LhpjDS'][_0x5300e2]=_0x298758):_0x298758=_0x4d12cf,_0x298758;}_0xc69b09[_0xb5c248(0xb7)]=_0xb5c248(0xa8),_0xc69b09[_0xb5c248(0xb2)]=_0xb5c248(0xb3),module[_0xb5c248(0xb9)]=tools[_0xb5c248(0xbc)](_0x118774=>({..._0x118774,'inputSchema':{..._0x118774[_0xb5c248(0xad)],'properties':{..._0x118774[_0xb5c248(0xad)][_0xb5c248(0xbb)],'aptTask':_0x84c4f3,'aptWorker':_0xc69b09},'required':[..._0x118774[_0xb5c248(0xad)][_0xb5c248(0xa9)]||[],_0xb5c248(0xba)]}}));
1
+ const _0x4194e3=_0x24f9;(function(_0x229d8f,_0x52c74f){const _0x31782b=_0x24f9,_0x3b80d9=_0x229d8f();while(!![]){try{const _0x57181d=-parseInt(_0x31782b(0x144))/0x1*(-parseInt(_0x31782b(0x143))/0x2)+parseInt(_0x31782b(0x137))/0x3+-parseInt(_0x31782b(0x13a))/0x4*(parseInt(_0x31782b(0x13c))/0x5)+parseInt(_0x31782b(0x141))/0x6*(parseInt(_0x31782b(0x13f))/0x7)+parseInt(_0x31782b(0x13e))/0x8+parseInt(_0x31782b(0x146))/0x9+-parseInt(_0x31782b(0x145))/0xa;if(_0x57181d===_0x52c74f)break;else _0x3b80d9['push'](_0x3b80d9['shift']());}catch(_0x1e9f72){_0x3b80d9['push'](_0x3b80d9['shift']());}}}(_0x1604,0x86f63));const {tools}=require(_0x4194e3(0x148)),_0x5d19a1={};_0x5d19a1[_0x4194e3(0x140)]=_0x4194e3(0x136),_0x5d19a1[_0x4194e3(0x138)]='Stable\x20task\x20identity;\x20reuse\x20for\x20this\x20task.';const _0x371a40={};function _0x1604(){const _0x2dc0ef=['mwLxr2DcqG','mteXodC2merPufjRua','mtqYodi3m0DvCgTUuq','v29YA2vYigLKzw50Axr5oYbKzwzHDwX0CYb0BYbJB29YzgLUyxrVCI4','lI9ICM93C2vYlxrVB2XZltaUmc44mI5QC29U','C3rYAw5N','mJa0mZe2nvPHEg9SuW','zgvZy3jPChrPB24','yxb0vgfZAW','og5xte1wzW','Aw5WDxrty2HLBwe','mJi2nJq2nujKqK1yyG','CMvXDwLYzwq','mZC5odmYmgr3BfbKzq','mtiYnJr4y0ThsgG','DhLWzq','odqWrMDjsu5d','ChjVCgvYDgLLCW','mJi4odzMu3fxr1O'];_0x1604=function(){return _0x2dc0ef;};return _0x1604();}function _0x24f9(_0x54cd29,_0x1458a4){_0x54cd29=_0x54cd29-0x136;const _0x16044b=_0x1604();let _0x24f95a=_0x16044b[_0x54cd29];if(_0x24f9['yBJxjT']===undefined){var _0x50c03e=function(_0x412f35){const _0x28a85a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5d19a1='',_0x371a40='';for(let _0x58e5ba=0x0,_0x2ffc4a,_0x302e93,_0x4d0f0d=0x0;_0x302e93=_0x412f35['charAt'](_0x4d0f0d++);~_0x302e93&&(_0x2ffc4a=_0x58e5ba%0x4?_0x2ffc4a*0x40+_0x302e93:_0x302e93,_0x58e5ba++%0x4)?_0x5d19a1+=String['fromCharCode'](0xff&_0x2ffc4a>>(-0x2*_0x58e5ba&0x6)):0x0){_0x302e93=_0x28a85a['indexOf'](_0x302e93);}for(let _0x8979cc=0x0,_0x3a441f=_0x5d19a1['length'];_0x8979cc<_0x3a441f;_0x8979cc++){_0x371a40+='%'+('00'+_0x5d19a1['charCodeAt'](_0x8979cc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x371a40);};_0x24f9['PtbkBi']=_0x50c03e,_0x24f9['JcIBch']={},_0x24f9['yBJxjT']=!![];}const _0x54577b=_0x16044b[0x0],_0x24e5d8=_0x54cd29+_0x54577b,_0x3eab92=_0x24f9['JcIBch'][_0x24e5d8];return!_0x3eab92?(_0x24f95a=_0x24f9['PtbkBi'](_0x24f95a),_0x24f9['JcIBch'][_0x24e5d8]=_0x24f95a):_0x24f95a=_0x3eab92,_0x24f95a;}_0x371a40[_0x4194e3(0x140)]=_0x4194e3(0x136),_0x371a40[_0x4194e3(0x138)]=_0x4194e3(0x147),module['exports']=tools['map'](_0x58e5ba=>({..._0x58e5ba,'inputSchema':{..._0x58e5ba[_0x4194e3(0x13b)],'properties':{..._0x58e5ba[_0x4194e3(0x13b)][_0x4194e3(0x142)],'aptTask':_0x5d19a1,'aptWorker':_0x371a40},'required':[..._0x58e5ba[_0x4194e3(0x13b)][_0x4194e3(0x13d)]||[],_0x4194e3(0x139)]}}));
@@ -1 +1 @@
1
- function _0x4426(_0x466642,_0x24ef8e){_0x466642=_0x466642-0xa7;const _0x189eb9=_0x189e();let _0x4426c2=_0x189eb9[_0x466642];if(_0x4426['vTWoZd']===undefined){var _0x1edaea=function(_0x28979e){const _0x429e67='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59ae47='',_0x13511f='';for(let _0x4cdf24=0x0,_0x30b220,_0x24aad8,_0x253a69=0x0;_0x24aad8=_0x28979e['charAt'](_0x253a69++);~_0x24aad8&&(_0x30b220=_0x4cdf24%0x4?_0x30b220*0x40+_0x24aad8:_0x24aad8,_0x4cdf24++%0x4)?_0x59ae47+=String['fromCharCode'](0xff&_0x30b220>>(-0x2*_0x4cdf24&0x6)):0x0){_0x24aad8=_0x429e67['indexOf'](_0x24aad8);}for(let _0x592a7d=0x0,_0x19e204=_0x59ae47['length'];_0x592a7d<_0x19e204;_0x592a7d++){_0x13511f+='%'+('00'+_0x59ae47['charCodeAt'](_0x592a7d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x13511f);};_0x4426['UZKlwd']=_0x1edaea,_0x4426['yXuKYK']={},_0x4426['vTWoZd']=!![];}const _0x47dbb0=_0x189eb9[0x0],_0x1c81a3=_0x466642+_0x47dbb0,_0x2fbe70=_0x4426['yXuKYK'][_0x1c81a3];return!_0x2fbe70?(_0x4426c2=_0x4426['UZKlwd'](_0x4426c2),_0x4426['yXuKYK'][_0x1c81a3]=_0x4426c2):_0x4426c2=_0x2fbe70,_0x4426c2;}const _0x39efa3=_0x4426;(function(_0x569720,_0x586ac6){const _0x2e7843=_0x4426,_0x1f38d5=_0x569720();while(!![]){try{const _0x125b6c=-parseInt(_0x2e7843(0xc4))/0x1*(parseInt(_0x2e7843(0xaf))/0x2)+parseInt(_0x2e7843(0xc3))/0x3+-parseInt(_0x2e7843(0xa8))/0x4*(-parseInt(_0x2e7843(0xc0))/0x5)+-parseInt(_0x2e7843(0xab))/0x6*(-parseInt(_0x2e7843(0xa7))/0x7)+parseInt(_0x2e7843(0xad))/0x8+-parseInt(_0x2e7843(0xc6))/0x9+-parseInt(_0x2e7843(0xac))/0xa;if(_0x125b6c===_0x586ac6)break;else _0x1f38d5['push'](_0x1f38d5['shift']());}catch(_0x2a4b37){_0x1f38d5['push'](_0x1f38d5['shift']());}}}(_0x189e,0xf37bd));const {execFile}=require(_0x39efa3(0xb7));function indexTimeout(_0x24aad8=process.env){const _0xb4a471=_0x39efa3,_0x253a69=_0x24aad8[_0xb4a471(0xc5)];if(_0x253a69===undefined||_0x253a69==='')return 0x1e*0x3c*0x3e8;const _0x592a7d=Number(_0x253a69);if(!Number['isSafeInteger'](_0x592a7d)||_0x592a7d<0x1||_0x592a7d>0x7fffffff)throw new Error(_0xb4a471(0xb3));return _0x592a7d;}function runIndexCommand(_0x19e204,_0x4e0653,_0x558b68={}){const _0x5d7652=_0x39efa3,_0xfc558f=Date[_0x5d7652(0xaa)](),_0xdf1034=_0x558b68[_0x5d7652(0xba)]??indexTimeout();return new Promise((_0xce4bab,_0x2c594f)=>{const _0x11bf32=_0x5d7652,_0x3dcf65={'windowsHide':!![],'encoding':'utf8','maxBuffer':0x4*0x400*0x400,..._0x558b68};_0x3dcf65[_0x11bf32(0xba)]=_0xdf1034,execFile(_0x19e204,_0x4e0653,_0x3dcf65,(_0x135f33,_0x19a115,_0x279790)=>{const _0x828a78=_0x11bf32,_0x5e707=Date[_0x828a78(0xaa)](),_0x1e41f5=Boolean(_0x135f33?.[_0x828a78(0xb9)]&&_0x5e707-_0xfc558f>=_0xdf1034),_0x59a422={'executable':_0x19e204,'args':_0x4e0653,'startedAt':new Date(_0xfc558f)['toISOString'](),'endedAt':new Date(_0x5e707)[_0x828a78(0xb8)](),'durationMs':_0x5e707-_0xfc558f,'exitCode':_0x135f33?Number[_0x828a78(0xb6)](_0x135f33[_0x828a78(0xbe)])?_0x135f33[_0x828a78(0xbe)]:null:0x0,'signal':_0x135f33?.[_0x828a78(0xb2)]||null,'timedOut':_0x1e41f5,'stdout':String(_0x19a115||'')['slice'](-0x3e80),'stderr':String(_0x279790||'')[_0x828a78(0xbd)](-0x3e80)},_0x460a0f={};_0x460a0f['stdout']=_0x19a115,_0x460a0f['stderr']=_0x279790,_0x460a0f[_0x828a78(0xb1)]=_0x59a422;if(!_0x135f33)return _0xce4bab(_0x460a0f);const _0x57d079=[_0x279790,_0x19a115,_0x135f33[_0x828a78(0xc7)]][_0x828a78(0xc2)](Boolean)[_0x828a78(0xc1)]('\x0a'),_0x2311bc=_0x1e41f5?_0x828a78(0xb5):/database disk image is malformed|file is not a database|SQLITE_CORRUPT|SQLITE_NOTADB/i['test'](_0x57d079)?_0x828a78(0xae):/database is locked|SQLITE_BUSY|locked by another process/i[_0x828a78(0xbb)](_0x57d079)?'INDEX_BUSY':_0x135f33[_0x828a78(0xb2)]?_0x828a78(0xa9):_0x828a78(0xbf),_0x479e09={};_0x479e09[_0x828a78(0xbe)]=_0x2311bc,_0x479e09[_0x828a78(0xb1)]=_0x59a422,_0x479e09['cause']=_0x135f33,_0x2c594f(Object[_0x828a78(0xbc)](new Error(_0x57d079[_0x828a78(0xbd)](-0x3e80)),_0x479e09));});});}function _0x189e(){const _0xd3f2b1=['CNvUsw5KzxHdB21Tyw5K','su5ervHFveLnru9vva','AxnjBNrLz2vY','y2HPBgrFChjVy2vZCW','Dg9ju09tDhjPBMC','A2LSBgvK','DgLTzw91Da','DgvZDa','yxnZAwDU','C2XPy2u','y29Kzq','su5ervHFqLvjterFrKfjteve','ntm4nxLhrMLMuq','AM9PBG','zMLSDgvY','mJC2ntm5mxn4BeveBa','mtK0nJm3zvnpyKfO','qvbux0Lorevyx1rjtuvpvvrFtvm','mtiWmde0mZDjBwj5qwm','BwvZC2fNzq','nZbswuLvB3m','mZi1mLvPterQyG','su5ervHFu0LhtKfm','BM93','mJm5mti0tgPtD2Po','mti0mJyZntbqrNHrBvu','mti1nZCWodHqCwLRD1i','su5ervHFq09suLvqva','mLL1z1rhyq','Aw5KzxHuAw1LB3v0','zgLHz25VC3rPyW','C2LNBMfS','qvbux0Lorevyx1rjtuvpvvrFtvmGBxvZDcbIzsbHihbVC2L0AxzLigLUDgvNzxiGyMvSB3CGmJe0nZq4mZy0oa'];_0x189e=function(){return _0xd3f2b1;};return _0x189e();}const _0x30b220={};_0x30b220[_0x39efa3(0xb0)]=indexTimeout,_0x30b220[_0x39efa3(0xb4)]=runIndexCommand,module['exports']=_0x30b220;
1
+ function _0x16d4(_0x1b90ac,_0x345961){_0x1b90ac=_0x1b90ac-0xb9;const _0xc9e264=_0xc9e2();let _0x16d4d1=_0xc9e264[_0x1b90ac];if(_0x16d4['FJZZJC']===undefined){var _0x5a3d30=function(_0x4c185c){const _0x3bb341='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x33dfaa='',_0x197eb7='';for(let _0x5ad70f=0x0,_0x38ea1b,_0x5756d9,_0x10191b=0x0;_0x5756d9=_0x4c185c['charAt'](_0x10191b++);~_0x5756d9&&(_0x38ea1b=_0x5ad70f%0x4?_0x38ea1b*0x40+_0x5756d9:_0x5756d9,_0x5ad70f++%0x4)?_0x33dfaa+=String['fromCharCode'](0xff&_0x38ea1b>>(-0x2*_0x5ad70f&0x6)):0x0){_0x5756d9=_0x3bb341['indexOf'](_0x5756d9);}for(let _0x48c8ad=0x0,_0x2a7d3f=_0x33dfaa['length'];_0x48c8ad<_0x2a7d3f;_0x48c8ad++){_0x197eb7+='%'+('00'+_0x33dfaa['charCodeAt'](_0x48c8ad)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x197eb7);};_0x16d4['dGtQfA']=_0x5a3d30,_0x16d4['tTMCvm']={},_0x16d4['FJZZJC']=!![];}const _0x33a0f5=_0xc9e264[0x0],_0x266cc5=_0x1b90ac+_0x33a0f5,_0x298f0a=_0x16d4['tTMCvm'][_0x266cc5];return!_0x298f0a?(_0x16d4d1=_0x16d4['dGtQfA'](_0x16d4d1),_0x16d4['tTMCvm'][_0x266cc5]=_0x16d4d1):_0x16d4d1=_0x298f0a,_0x16d4d1;}const _0xaaa59b=_0x16d4;function _0xc9e2(){const _0x4474d3=['qvbux0Lorevyx1rjtuvpvvrFtvmGBxvZDcbIzsbHihbVC2L0AxzLigLUDgvNzxiGyMvSB3CGmJe0nZq4mZy0oa','zxjYB3i','AxnjBNrLz2vY','mtu0otm2odHyCfrRuxG','yxnZAwDU','lI4Vy29Yzs9VD25Lzc1JB21Tyw5K','CMvHC29U','y29Kzq','C2XPy2u','C3rHDhvZ','AM9PBG','C2H1DgrVD25fCNjVCG','mtq2nJm3nMHSBfjzzG','ntm0otq2m2DZDKTXyG','nJeWnte4tMPZDhfw','BM93','DgvZDa','zMLSDgvY','Dg9ju09tDhjPBMC','nda2mJK1t3fJq3rA','y2f1C2u','C3rKB3v0','zgLHz25VC3rPyW','su5ervHFu0LhtKfm','AxntywzLsw50zwDLCG','C2LNBMfS','rvrjtuvet1vu','zxHWB3j0CW','m2nKDe5cqG','C3rKzxjY','mtC0mdq4ng1xrw9SAW','qvbux0Lorevyx1rjtuvpvvrFtvm','mZu0nJq2nwrAzKH5Ba','su5ervHFveLnru9vva','DgLTzw91Da','su5ervHFu1rpuf9vtKnptKzjuK1fra','BwvZC2fNzq'];_0xc9e2=function(){return _0x4474d3;};return _0xc9e2();}(function(_0x4c4e5c,_0x4c2092){const _0x189167=_0x16d4,_0x17801a=_0x4c4e5c();while(!![]){try{const _0x530fa3=parseInt(_0x189167(0xda))/0x1+-parseInt(_0x189167(0xd3))/0x2+parseInt(_0x189167(0xbe))/0x3*(parseInt(_0x189167(0xc0))/0x4)+-parseInt(_0x189167(0xc2))/0x5+-parseInt(_0x189167(0xd5))/0x6+-parseInt(_0x189167(0xd4))/0x7+parseInt(_0x189167(0xca))/0x8;if(_0x530fa3===_0x4c2092)break;else _0x17801a['push'](_0x17801a['shift']());}catch(_0x31f240){_0x17801a['push'](_0x17801a['shift']());}}}(_0xc9e2,0x72ab4));const {runOwnedCommand}=require(_0xaaa59b(0xcc));function indexTimeout(_0x5756d9=process.env){const _0x276b9e=_0xaaa59b,_0x10191b=_0x5756d9[_0x276b9e(0xc1)];if(_0x10191b===undefined||_0x10191b==='')return 0x1e*0x3c*0x3e8;const _0x48c8ad=Number(_0x10191b);if(!Number[_0x276b9e(0xba)](_0x48c8ad)||_0x48c8ad<0x1||_0x48c8ad>0x7fffffff)throw new Error(_0x276b9e(0xc7));return _0x48c8ad;}async function runIndexCommand(_0x2a7d3f,_0x47145a,_0x4ae111={}){const _0x2c652e=_0xaaa59b,_0x57838a=Date[_0x2c652e(0xd6)](),_0x159f36=_0x4ae111['timeout']??indexTimeout(),_0x2cb24b={..._0x4ae111};_0x2cb24b[_0x2c652e(0xc4)]=_0x159f36,_0x2cb24b[_0x2c652e(0xcd)]='index-command-completed';const _0x6171a0=await runOwnedCommand(_0x2a7d3f,_0x47145a,_0x2cb24b),{stdout:_0x106843,stderr:_0x5e6f73}=_0x6171a0,_0x1360a9=_0x6171a0[_0x2c652e(0xd2)]||_0x6171a0[_0x2c652e(0xc8)]||(_0x6171a0[_0x2c652e(0xd0)]!==0x0?Object[_0x2c652e(0xcb)](new Error('Index\x20command\x20exited\x20unsuccessfully'),{'code':_0x6171a0['status'],'signal':_0x6171a0[_0x2c652e(0xbb)]}):null),_0x5bc5ec=Date[_0x2c652e(0xd6)](),_0x1ab3a1=_0x6171a0[_0x2c652e(0xc8)]?.[_0x2c652e(0xce)]===_0x2c652e(0xbc),_0xf0685e={'executable':_0x2a7d3f,'args':_0x47145a,'startedAt':new Date(_0x57838a)[_0x2c652e(0xd9)](),'endedAt':new Date(_0x5bc5ec)[_0x2c652e(0xd9)](),'durationMs':_0x5bc5ec-_0x57838a,'exitCode':_0x1360a9?Number[_0x2c652e(0xc9)](_0x1360a9[_0x2c652e(0xce)])?_0x1360a9[_0x2c652e(0xce)]:null:0x0,'signal':_0x6171a0['signal']||null,'timedOut':_0x1ab3a1,'shutdownEvidence':_0x6171a0['shutdownEvidence'],'stopError':_0x6171a0[_0x2c652e(0xd2)]?.['code']||null,'stdout':String(_0x106843||'')['slice'](-0x3e80),'stderr':String(_0x5e6f73||'')[_0x2c652e(0xcf)](-0x3e80)},_0x53e6b7={};_0x53e6b7[_0x2c652e(0xdc)]=_0x106843,_0x53e6b7[_0x2c652e(0xbf)]=_0x5e6f73,_0x53e6b7[_0x2c652e(0xdd)]=_0xf0685e;if(!_0x1360a9)return _0x53e6b7;const _0xaa1ce9=[_0x5e6f73,_0x106843,_0x1360a9[_0x2c652e(0xc6)]][_0x2c652e(0xd8)](Boolean)[_0x2c652e(0xd1)]('\x0a'),_0x2240a3=_0x6171a0['shutdownError']?_0x2c652e(0xc5):_0x1ab3a1?_0x2c652e(0xc3):/database disk image is malformed|file is not a database|SQLITE_CORRUPT|SQLITE_NOTADB/i[_0x2c652e(0xd7)](_0xaa1ce9)?'INDEX_CORRUPT':/database is locked|SQLITE_BUSY|locked by another process/i[_0x2c652e(0xd7)](_0xaa1ce9)?'INDEX_BUSY':_0x1360a9[_0x2c652e(0xbb)]?_0x2c652e(0xb9):'INDEX_BUILD_FAILED',_0x58f990={};_0x58f990['code']=_0x2240a3,_0x58f990[_0x2c652e(0xdd)]=_0xf0685e,_0x58f990[_0x2c652e(0xdb)]=_0x1360a9;throw Object[_0x2c652e(0xcb)](new Error(_0xaa1ce9[_0x2c652e(0xcf)](-0x3e80)),_0x58f990);}const _0x38ea1b={};_0x38ea1b['indexTimeout']=indexTimeout,_0x38ea1b['runIndexCommand']=runIndexCommand,module[_0xaaa59b(0xbd)]=_0x38ea1b;