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.
- package/README.md +6 -1
- package/bin/cli.js +1 -1
- package/bundle/NOTICES.md +0 -0
- package/bundle/core.enc +0 -0
- package/bundle/mcp-rules.enc +0 -0
- package/bundle/skills-aso.enc +0 -0
- package/bundle/skills-ba.enc +0 -0
- package/bundle/skills-base.enc +0 -0
- package/bundle/skills-be.enc +0 -0
- package/bundle/skills-design.enc +0 -0
- package/bundle/skills-fe.enc +0 -0
- package/bundle/skills-marketing.enc +0 -0
- package/bundle/skills-mobile.enc +0 -0
- package/bundle/skills-pm.enc +0 -0
- package/docs/apt-3.5.0-migration.md +37 -0
- package/docs/technical-sources-release-checklist.md +14 -0
- package/docs/technical-sources.md +125 -0
- package/docs/upstream-manifest.json +89 -0
- package/integrity-manifest.json +127 -106
- package/package.json +1 -1
- package/release-check.js +76 -71
- package/source-skills-lock.json +311 -0
- package/src/backends/browser-tools.js +1 -1
- package/src/backends/index-command.js +1 -1
- package/src/backends/index-store.js +1 -1
- package/src/backends/memory-2026.8.31.json +34 -34
- package/src/backends/profiles.js +1 -1
- package/src/core/admission-fence.js +1 -1
- package/src/core/aso-import.js +1 -1
- package/src/core/caller-context.js +1 -1
- package/src/core/catalog.js +1 -1
- package/src/core/claude-caller-authority.js +1 -1
- package/src/core/claude-invocation.js +1 -1
- package/src/core/claude-native.js +1 -1
- package/src/core/claude-plan.js +1 -0
- package/src/core/claude-worker-transcript.js +1 -1
- package/src/core/codex-host-metadata.js +1 -1
- package/src/core/codex-transcript-receipt.js +1 -1
- package/src/core/context-metrics.js +1 -1
- package/src/core/doctor.js +1 -1
- package/src/core/draining-completion.js +1 -1
- package/src/core/execution.js +1 -1
- package/src/core/git-context.js +1 -0
- package/src/core/hook-bridge.js +1 -1
- package/src/core/host-adapters.js +1 -1
- package/src/core/ipc-envelope.js +1 -1
- package/src/core/memory-scope.js +1 -0
- package/src/core/memory-store.js +1 -1
- package/src/core/model-inventory.js +1 -1
- package/src/core/model-routing.js +1 -1
- package/src/core/native-dispatch.js +1 -1
- package/src/core/node-version.js +1 -1
- package/src/core/npm-cli.js +1 -1
- package/src/core/owned-command-child.js +1 -0
- package/src/core/owned-command.js +1 -0
- package/src/core/owned-lock.js +1 -1
- package/src/core/owned-process.js +1 -0
- package/src/core/presentations.js +1 -1
- package/src/core/quality-artifacts.js +1 -1
- package/src/core/quality.js +1 -1
- package/src/core/read-command.js +1 -0
- package/src/core/readonly-skill.js +1 -0
- package/src/core/resource-transaction.js +1 -1
- package/src/core/run-compatibility.js +1 -1
- package/src/core/runtime-info.js +1 -1
- package/src/core/runtime-ownership.js +1 -1
- package/src/core/session.js +1 -1
- package/src/core/skill-companions.js +1 -1
- package/src/core/skill-names.js +1 -1
- package/src/core/storage-retry.js +1 -0
- package/src/core/tool-contracts.js +1 -1
- package/src/core/update-control.js +1 -1
- package/src/core/upgrade-runs.js +1 -0
- package/src/core/upgrade-stop.js +1 -0
- package/src/core/windows-job.js +1 -0
- package/src/core/windows-job.ps1 +75 -0
- package/src/core/workspace-generation.js +1 -1
- package/src/core/workspace-path.js +1 -1
- package/src/installer/bounded-command.js +1 -1
- package/src/installer/candidate-preflight.js +1 -1
- package/src/installer/connection-activation.js +1 -1
- package/src/installer/connection-supervisor.js +1 -1
- package/src/installer/deployment-draft.js +1 -1
- package/src/installer/gateway-context.js +1 -1
- package/src/installer/gateway-migration.js +1 -1
- package/src/installer/gateway-runtime.js +1 -1
- package/src/installer/global-setup.js +1 -1
- package/src/installer/hook-context-client.js +1 -1
- package/src/installer/hook-dispatcher.js +51 -51
- package/src/installer/host-hooks.js +1 -1
- package/src/installer/managed-config.js +1 -1
- package/src/installer/platform-config.js +1 -1
- package/src/installer/prerequisites.js +1 -1
- package/src/installer/presentations.js +1 -1
- package/src/installer/project-setup.js +1 -1
- package/src/installer/registration-closure.js +1 -0
- package/src/installer/registration-plan.js +1 -1
- package/src/installer/registration-receipt.js +1 -1
- package/src/installer/registrations.js +1 -1
- package/src/installer/runtime-activation.js +1 -1
- package/src/installer/runtime-child.js +1 -1
- package/src/installer/runtime-launcher.js +50 -50
- package/src/installer/runtime-lock.js +1 -1
- package/src/installer/runtime-store.js +1 -1
- package/src/installer/runtime-supervisor.js +1 -1
- package/src/installer/setup-wizard.js +1 -1
- package/src/installer/update-addons.js +1 -1
- package/src/installer/update-executor.js +1 -1
- package/src/installer/workspace-registry.js +1 -1
- package/src/installer/workspace-transaction.js +1 -1
- package/src/installer/workspace-update.js +1 -1
- package/src/license/crypto.js +1 -1
- package/src/license/fingerprint.js +1 -1
- package/src/license/terms.js +1 -1
- package/src/license/verify.js +1 -1
- package/src/presets/index.js +1 -1
- package/src/proxy/backends.js +1 -1
- package/src/proxy/browser-sessions.js +1 -1
- package/src/proxy/core-tools.js +1 -1
- package/src/proxy/pipeline.js +1 -1
- package/src/proxy/public-catalog.js +1 -1
- package/src/proxy/router.config.js +1 -1
- package/src/proxy/router.js +1 -1
- package/src/proxy/server.js +1 -1
- package/src/proxy/workspace-gateway.js +1 -1
- 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
|
-
|
|
241
|
-
|
|
242
|
-
const
|
|
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(
|
|
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(
|
|
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(
|
|
271
|
-
const claudeHooks = buildHookConfig('claude-code', path.join(
|
|
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(
|
|
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(
|
|
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(
|
|
297
|
-
const packageLicense = require(path.join(
|
|
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(
|
|
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
|
|
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
|
|
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;
|