robrain 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -0
- package/dist/commands/install.js +2 -2
- package/dist/commands/up.test.js +2 -2
- package/dist/index.js +1 -1
- package/dist/lib/mcp-bundle.d.ts +2 -4
- package/dist/lib/mcp-bundle.d.ts.map +1 -1
- package/dist/lib/mcp-bundle.js +18 -6
- package/dist/lib/mcp-bundle.js.map +1 -1
- package/dist/lib/mcp-bundle.test.js +15 -3
- package/dist/lib/mcp-bundle.test.js.map +1 -1
- package/package.json +12 -11
- package/scripts/vendor-sensing-mcp.mjs +32 -0
- package/scripts/verify-publish-tarball.mjs +55 -0
- package/vendor/sensing-mcp/dist/index.js +23421 -0
- package/vendor/sensing-mcp/package.json +7 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2026 Rory Plans, Inc.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
package/dist/commands/install.js
CHANGED
|
@@ -202,7 +202,7 @@ export async function installCommand(opts) {
|
|
|
202
202
|
planningKey: provisioned.planningKey,
|
|
203
203
|
embeddingProvider: embeddingProvider ?? 'openai',
|
|
204
204
|
installedAt: new Date().toISOString(),
|
|
205
|
-
version: '2.3.
|
|
205
|
+
version: '2.3.1',
|
|
206
206
|
});
|
|
207
207
|
spinner.succeed('MCP servers configured');
|
|
208
208
|
// ── Done ───────────────────────────────────────────────────
|
|
@@ -352,7 +352,7 @@ async function installSelfHosted(opts) {
|
|
|
352
352
|
...(perceptionKey ? { perceptionKey } : {}),
|
|
353
353
|
embeddingProvider: provider,
|
|
354
354
|
installedAt: new Date().toISOString(),
|
|
355
|
-
version: '2.3.
|
|
355
|
+
version: '2.3.1',
|
|
356
356
|
selfHosted: true,
|
|
357
357
|
});
|
|
358
358
|
spinner.succeed('MCP servers configured for self-hosted mode');
|
package/dist/commands/up.test.js
CHANGED
|
@@ -2,9 +2,9 @@ import { describe, it } from 'node:test';
|
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
3
|
import { ensureStackEnvContent, readEnvValue, renderStackCompose, DEFAULT_IMAGE_REPO } from './up.js';
|
|
4
4
|
describe('renderStackCompose', () => {
|
|
5
|
-
const compose = renderStackCompose(`${DEFAULT_IMAGE_REPO}:2.3.
|
|
5
|
+
const compose = renderStackCompose(`${DEFAULT_IMAGE_REPO}:2.3.1`);
|
|
6
6
|
it('runs Perception from the published image with an env override hook', () => {
|
|
7
|
-
assert.match(compose, /image: \$\{PERCEPTION_IMAGE:-ghcr\.io\/adelinamart\/robrain-perception:2\.3\.
|
|
7
|
+
assert.match(compose, /image: \$\{PERCEPTION_IMAGE:-ghcr\.io\/adelinamart\/robrain-perception:2\.3\.1\}/);
|
|
8
8
|
assert.doesNotMatch(compose, /build:/);
|
|
9
9
|
});
|
|
10
10
|
it('mounts the stack-local schema and env file', () => {
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,7 @@ import { outcomesScanCommand, outcomesRecordCommand } from './commands/outcomes.
|
|
|
27
27
|
import { explainCommand } from './commands/explain.js';
|
|
28
28
|
import { projectsListCommand, projectsMergeCommand } from './commands/projects.js';
|
|
29
29
|
import { upCommand, downCommand, DEFAULT_IMAGE_REPO } from './commands/up.js';
|
|
30
|
-
const VERSION = '2.3.
|
|
30
|
+
const VERSION = '2.3.1';
|
|
31
31
|
program
|
|
32
32
|
.name('robrain')
|
|
33
33
|
.description('Institutional memory for AI coding agents — by Rory Plans')
|
package/dist/lib/mcp-bundle.d.ts
CHANGED
|
@@ -12,10 +12,8 @@ export declare class McpBundleError extends Error {
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function sensingBundleReady(robrainMcpDir: string): boolean;
|
|
14
14
|
/**
|
|
15
|
-
* Locate the
|
|
16
|
-
*
|
|
17
|
-
* Returns the package directory, or undefined when running from a source tree
|
|
18
|
-
* where it has not been linked/built.
|
|
15
|
+
* Locate the built sensing-mcp bundle shipped with this CLI.
|
|
16
|
+
* Published tarballs carry it under vendor/; monorepo dev resolves packages/sensing-mcp.
|
|
19
17
|
*/
|
|
20
18
|
export declare function resolveInstalledSensingMcpDir(): string | undefined;
|
|
21
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-bundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-bundle.ts"],"names":[],"mappings":"AASA,qBAAa,cAAe,SAAQ,KAAK;IAC9B,IAAI,SAAmB;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,GAAG,SAAS,CAoBlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAIhF;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAkCvF;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAiCpF"}
|
package/dist/lib/mcp-bundle.js
CHANGED
|
@@ -4,6 +4,7 @@ import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, rmSync, symlink
|
|
|
4
4
|
import { createRequire } from 'module';
|
|
5
5
|
import { platform } from 'os';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
7
8
|
export class McpBundleError extends Error {
|
|
8
9
|
name = 'McpBundleError';
|
|
9
10
|
}
|
|
@@ -21,19 +22,30 @@ export function sensingBundleReady(robrainMcpDir) {
|
|
|
21
22
|
return existsSync(join(base, 'dist', 'index.js')) && existsSync(join(base, 'package.json'));
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
|
-
* Locate the
|
|
25
|
-
*
|
|
26
|
-
* Returns the package directory, or undefined when running from a source tree
|
|
27
|
-
* where it has not been linked/built.
|
|
25
|
+
* Locate the built sensing-mcp bundle shipped with this CLI.
|
|
26
|
+
* Published tarballs carry it under vendor/; monorepo dev resolves packages/sensing-mcp.
|
|
28
27
|
*/
|
|
29
28
|
export function resolveInstalledSensingMcpDir() {
|
|
29
|
+
// Compiled location: <cli-root>/dist/lib/mcp-bundle.js — cli root is two up.
|
|
30
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
31
|
+
const cliRoot = join(here, '..', '..');
|
|
32
|
+
const candidates = [
|
|
33
|
+
join(cliRoot, 'vendor', 'sensing-mcp'), // published tarball (or after vendor script)
|
|
34
|
+
join(cliRoot, '..', 'sensing-mcp'), // monorepo sibling package
|
|
35
|
+
];
|
|
30
36
|
try {
|
|
31
37
|
const req = createRequire(import.meta.url);
|
|
32
|
-
|
|
38
|
+
candidates.unshift(dirname(req.resolve('@robrain/sensing-mcp/package.json')));
|
|
33
39
|
}
|
|
34
40
|
catch {
|
|
35
|
-
|
|
41
|
+
// optional workspace link — not present in the published tarball
|
|
36
42
|
}
|
|
43
|
+
for (const dir of candidates) {
|
|
44
|
+
if (existsSync(join(dir, 'dist', 'index.js')) && existsSync(join(dir, 'package.json'))) {
|
|
45
|
+
return dir;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
37
49
|
}
|
|
38
50
|
/**
|
|
39
51
|
* Materialize ~/.robrain/mcp/sensing from the @robrain/sensing-mcp package that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bundle.js","sourceRoot":"","sources":["../../src/lib/mcp-bundle.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,oFAAoF;AAEpF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-bundle.js","sourceRoot":"","sources":["../../src/lib/mcp-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,19 @@ import { platform, tmpdir } from 'os';
|
|
|
3
3
|
import { join } from 'path';
|
|
4
4
|
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
5
5
|
import assert from 'node:assert/strict';
|
|
6
|
-
import { ensureSensingMcpBundle, materializeSensingBundle, sensingBundleReady } from './mcp-bundle.js';
|
|
6
|
+
import { ensureSensingMcpBundle, materializeSensingBundle, resolveInstalledSensingMcpDir, sensingBundleReady } from './mcp-bundle.js';
|
|
7
|
+
describe('resolveInstalledSensingMcpDir', () => {
|
|
8
|
+
// Regression: the vendor/monorepo fallbacks were once computed relative to
|
|
9
|
+
// dist/ instead of the cli root, so the published tarball shipped a bundle
|
|
10
|
+
// the resolver could not see. In the workspace (and CI, after `pnpm -r build`)
|
|
11
|
+
// at least one candidate — vendor/sensing-mcp or ../sensing-mcp — must hit.
|
|
12
|
+
it('finds a built sensing-mcp from the compiled dist location', () => {
|
|
13
|
+
const dir = resolveInstalledSensingMcpDir();
|
|
14
|
+
assert.ok(dir, 'expected a sensing-mcp dir, got undefined');
|
|
15
|
+
assert.ok(existsSync(join(dir, 'dist', 'index.js')));
|
|
16
|
+
assert.ok(existsSync(join(dir, 'package.json')));
|
|
17
|
+
});
|
|
18
|
+
});
|
|
7
19
|
let root;
|
|
8
20
|
let pkgDir;
|
|
9
21
|
let mcpDir;
|
|
@@ -41,11 +53,11 @@ describe('materializeSensingBundle', () => {
|
|
|
41
53
|
it('re-copies when the package version changed', () => {
|
|
42
54
|
writeFakePackage(pkgDir, '2.2.0', 'old');
|
|
43
55
|
assert.equal(materializeSensingBundle(pkgDir, mcpDir), true);
|
|
44
|
-
writeFakePackage(pkgDir, '2.3.
|
|
56
|
+
writeFakePackage(pkgDir, '2.3.1', 'new');
|
|
45
57
|
assert.equal(materializeSensingBundle(pkgDir, mcpDir), true);
|
|
46
58
|
assert.equal(readFileSync(join(mcpDir, 'sensing', 'dist', 'index.js'), 'utf8'), 'new');
|
|
47
59
|
const marker = JSON.parse(readFileSync(join(mcpDir, 'sensing', 'package.json'), 'utf8'));
|
|
48
|
-
assert.equal(marker.version, '2.3.
|
|
60
|
+
assert.equal(marker.version, '2.3.1');
|
|
49
61
|
});
|
|
50
62
|
it('replaces a symlinked destination from a previous --repo-root install', () => {
|
|
51
63
|
// Old dev install: ~/.robrain/mcp/sensing -> clone/packages/sensing-mcp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bundle.test.js","sourceRoot":"","sources":["../../src/lib/mcp-bundle.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-bundle.test.js","sourceRoot":"","sources":["../../src/lib/mcp-bundle.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "robrain",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "RoBrain CLI for installation, setup, and memory workflows",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -21,20 +21,13 @@
|
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
23
|
"bin",
|
|
24
|
-
"scripts"
|
|
24
|
+
"scripts",
|
|
25
|
+
"vendor"
|
|
25
26
|
],
|
|
26
27
|
"publishConfig": {
|
|
27
28
|
"access": "public"
|
|
28
29
|
},
|
|
29
|
-
"scripts": {
|
|
30
|
-
"build": "tsc",
|
|
31
|
-
"dev": "tsc --watch",
|
|
32
|
-
"typecheck": "tsc --noEmit",
|
|
33
|
-
"test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/mcp-bundle.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js",
|
|
34
|
-
"postinstall": "node scripts/chmod-bin.cjs"
|
|
35
|
-
},
|
|
36
30
|
"dependencies": {
|
|
37
|
-
"@robrain/sensing-mcp": "workspace:^",
|
|
38
31
|
"dotenv": "^16.4.5",
|
|
39
32
|
"chalk": "^5.3.0",
|
|
40
33
|
"ora": "^8.0.1",
|
|
@@ -45,5 +38,13 @@
|
|
|
45
38
|
"typescript": "^5.4.0",
|
|
46
39
|
"@types/node": "^20.0.0",
|
|
47
40
|
"@types/prompts": "^2.4.9"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc",
|
|
44
|
+
"dev": "tsc --watch",
|
|
45
|
+
"typecheck": "tsc --noEmit",
|
|
46
|
+
"test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/mcp-bundle.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js",
|
|
47
|
+
"pack:verify": "node scripts/verify-publish-tarball.mjs",
|
|
48
|
+
"postinstall": "node scripts/chmod-bin.cjs"
|
|
48
49
|
}
|
|
49
|
-
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Copy the built sensing-mcp bundle into vendor/ so the published robrain
|
|
3
|
+
// tarball is self-contained — no @robrain npm org or second package required.
|
|
4
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'
|
|
5
|
+
import { dirname, join } from 'path'
|
|
6
|
+
import { fileURLToPath } from 'url'
|
|
7
|
+
|
|
8
|
+
const cliRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
9
|
+
const src = join(cliRoot, '..', 'sensing-mcp')
|
|
10
|
+
const dest = join(cliRoot, 'vendor', 'sensing-mcp')
|
|
11
|
+
const srcEntry = join(src, 'dist', 'index.js')
|
|
12
|
+
|
|
13
|
+
if (!existsSync(srcEntry)) {
|
|
14
|
+
console.error('vendor-sensing-mcp: missing', srcEntry)
|
|
15
|
+
console.error('Run: pnpm --filter @robrain/sensing-mcp build')
|
|
16
|
+
process.exit(1)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const version = JSON.parse(readFileSync(join(src, 'package.json'), 'utf8')).version
|
|
20
|
+
|
|
21
|
+
rmSync(dest, { recursive: true, force: true })
|
|
22
|
+
mkdirSync(join(dest, 'dist'), { recursive: true })
|
|
23
|
+
cpSync(join(src, 'dist'), join(dest, 'dist'), { recursive: true })
|
|
24
|
+
writeFileSync(
|
|
25
|
+
join(dest, 'package.json'),
|
|
26
|
+
JSON.stringify(
|
|
27
|
+
{ name: '@robrain/sensing-mcp', version, private: true, type: 'module', main: './dist/index.js' },
|
|
28
|
+
null,
|
|
29
|
+
2,
|
|
30
|
+
) + '\n',
|
|
31
|
+
)
|
|
32
|
+
console.log(`Vendored sensing-mcp@${version} → packages/cli/vendor/sensing-mcp`)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// CI gate: mimic `pnpm publish` tarball shape without touching the registry.
|
|
3
|
+
// Catches workspace: leaks and resolver paths that miss vendor/sensing-mcp.
|
|
4
|
+
import { execFileSync } from 'child_process'
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, rmSync } from 'fs'
|
|
6
|
+
import { tmpdir } from 'os'
|
|
7
|
+
import { dirname, join } from 'path'
|
|
8
|
+
import { fileURLToPath, pathToFileURL } from 'url'
|
|
9
|
+
|
|
10
|
+
const cliRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
11
|
+
const work = join(tmpdir(), `robrain-pack-verify-${process.pid}`)
|
|
12
|
+
|
|
13
|
+
function fail(msg) {
|
|
14
|
+
console.error(`pack:verify FAILED — ${msg}`)
|
|
15
|
+
process.exit(1)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
mkdirSync(work, { recursive: true })
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
execFileSync('node', ['scripts/vendor-sensing-mcp.mjs'], { cwd: cliRoot, stdio: 'inherit' })
|
|
22
|
+
|
|
23
|
+
execFileSync('pnpm', ['pack', '--pack-destination', work], { cwd: cliRoot, stdio: 'inherit' })
|
|
24
|
+
|
|
25
|
+
const version = JSON.parse(readFileSync(join(cliRoot, 'package.json'), 'utf8')).version
|
|
26
|
+
const tarball = join(work, `robrain-${version}.tgz`)
|
|
27
|
+
if (!existsSync(tarball)) fail(`tarball not found: ${tarball}`)
|
|
28
|
+
|
|
29
|
+
execFileSync('tar', ['-xzf', tarball, '-C', work], { stdio: 'inherit' })
|
|
30
|
+
const extracted = join(work, 'package')
|
|
31
|
+
|
|
32
|
+
const published = JSON.parse(readFileSync(join(extracted, 'package.json'), 'utf8'))
|
|
33
|
+
for (const [dep, spec] of Object.entries(published.dependencies ?? {})) {
|
|
34
|
+
if (String(spec).startsWith('workspace:')) {
|
|
35
|
+
fail(`workspace: dep leaked to tarball: ${dep}=${spec}`)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const vendorEntry = join(extracted, 'vendor', 'sensing-mcp', 'dist', 'index.js')
|
|
40
|
+
if (!existsSync(vendorEntry)) {
|
|
41
|
+
fail('vendor/sensing-mcp/dist/index.js missing from tarball')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const bundleUrl = pathToFileURL(join(extracted, 'dist', 'lib', 'mcp-bundle.js')).href
|
|
45
|
+
const { resolveInstalledSensingMcpDir } = await import(bundleUrl)
|
|
46
|
+
const dir = resolveInstalledSensingMcpDir()
|
|
47
|
+
if (!dir) fail('resolveInstalledSensingMcpDir() returned undefined in extracted tarball')
|
|
48
|
+
if (!existsSync(join(dir, 'dist', 'index.js'))) {
|
|
49
|
+
fail(`resolved dir has no dist/index.js: ${dir}`)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log(`pack:verify ok — vendor resolves from ${dir}`)
|
|
53
|
+
} finally {
|
|
54
|
+
rmSync(work, { recursive: true, force: true })
|
|
55
|
+
}
|