@asc-agent/runtime 0.1.0 → 0.2.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 +4 -1
- package/dist/cli/asc.d.ts +0 -7
- package/dist/cli/asc.js +308 -148
- package/dist/core/attach/adopt.d.ts +38 -0
- package/dist/core/attach/adopt.js +104 -0
- package/dist/core/attach/bootstrap.d.ts +13 -3
- package/dist/core/attach/bootstrap.js +14 -17
- package/dist/core/attach/setup-plan.d.ts +1 -1
- package/dist/core/attach/setup-plan.js +20 -3
- package/dist/core/attach/setup.d.ts +10 -0
- package/dist/core/attach/setup.js +10 -0
- package/dist/core/distribution/release.d.ts +3 -3
- package/dist/core/distribution/release.js +1 -1
- package/dist/core/monitor/observation.d.ts +2 -2
- package/dist/core/resolver/load.d.ts +12 -1
- package/dist/core/resolver/load.js +23 -2
- package/dist/core/resolver/profile-source.d.ts +29 -0
- package/dist/core/resolver/profile-source.js +139 -0
- package/dist/core/workspace/identity.d.ts +2 -2
- package/dist/core/workspace/index-store.d.ts +10 -10
- package/dist/schemas/profile.d.ts +21 -21
- package/package.json +55 -55
|
@@ -32,15 +32,15 @@ export declare const Workspace: z.ZodObject<{
|
|
|
32
32
|
createdAt: z.ZodString;
|
|
33
33
|
lastSeenAt: z.ZodString;
|
|
34
34
|
}, "strip", z.ZodTypeAny, {
|
|
35
|
-
lastSeenAt: string;
|
|
36
35
|
workspaceId: string;
|
|
37
36
|
aliases: string[];
|
|
38
37
|
adoptionScope: "local" | "project";
|
|
39
38
|
createdAt: string;
|
|
40
|
-
}, {
|
|
41
39
|
lastSeenAt: string;
|
|
40
|
+
}, {
|
|
42
41
|
workspaceId: string;
|
|
43
42
|
createdAt: string;
|
|
43
|
+
lastSeenAt: string;
|
|
44
44
|
aliases?: string[] | undefined;
|
|
45
45
|
adoptionScope?: "local" | "project" | undefined;
|
|
46
46
|
}>;
|
|
@@ -10,15 +10,15 @@ declare const LocatorEntry: z.ZodObject<{
|
|
|
10
10
|
observedAt: z.ZodString;
|
|
11
11
|
}, "strip", z.ZodTypeAny, {
|
|
12
12
|
observedAt: string;
|
|
13
|
-
root: string;
|
|
14
13
|
platform: string;
|
|
15
14
|
workspaceId: string;
|
|
15
|
+
root: string;
|
|
16
16
|
kind?: "checkout" | "worktree" | undefined;
|
|
17
17
|
}, {
|
|
18
18
|
observedAt: string;
|
|
19
|
-
root: string;
|
|
20
19
|
platform: string;
|
|
21
20
|
workspaceId: string;
|
|
21
|
+
root: string;
|
|
22
22
|
kind?: "checkout" | "worktree" | undefined;
|
|
23
23
|
}>;
|
|
24
24
|
export type LocatorEntry = z.infer<typeof LocatorEntry>;
|
|
@@ -31,15 +31,15 @@ export declare const WorkspaceIndex: z.ZodObject<{
|
|
|
31
31
|
createdAt: z.ZodString;
|
|
32
32
|
lastSeenAt: z.ZodString;
|
|
33
33
|
}, "strip", z.ZodTypeAny, {
|
|
34
|
-
lastSeenAt: string;
|
|
35
34
|
workspaceId: string;
|
|
36
35
|
aliases: string[];
|
|
37
36
|
adoptionScope: "local" | "project";
|
|
38
37
|
createdAt: string;
|
|
39
|
-
}, {
|
|
40
38
|
lastSeenAt: string;
|
|
39
|
+
}, {
|
|
41
40
|
workspaceId: string;
|
|
42
41
|
createdAt: string;
|
|
42
|
+
lastSeenAt: string;
|
|
43
43
|
aliases?: string[] | undefined;
|
|
44
44
|
adoptionScope?: "local" | "project" | undefined;
|
|
45
45
|
}>>>;
|
|
@@ -53,47 +53,47 @@ export declare const WorkspaceIndex: z.ZodObject<{
|
|
|
53
53
|
observedAt: z.ZodString;
|
|
54
54
|
}, "strip", z.ZodTypeAny, {
|
|
55
55
|
observedAt: string;
|
|
56
|
-
root: string;
|
|
57
56
|
platform: string;
|
|
58
57
|
workspaceId: string;
|
|
58
|
+
root: string;
|
|
59
59
|
kind?: "checkout" | "worktree" | undefined;
|
|
60
60
|
}, {
|
|
61
61
|
observedAt: string;
|
|
62
|
-
root: string;
|
|
63
62
|
platform: string;
|
|
64
63
|
workspaceId: string;
|
|
64
|
+
root: string;
|
|
65
65
|
kind?: "checkout" | "worktree" | undefined;
|
|
66
66
|
}>>>;
|
|
67
67
|
}, "strip", z.ZodTypeAny, {
|
|
68
68
|
version: 1;
|
|
69
69
|
workspaces: Record<string, {
|
|
70
|
-
lastSeenAt: string;
|
|
71
70
|
workspaceId: string;
|
|
72
71
|
aliases: string[];
|
|
73
72
|
adoptionScope: "local" | "project";
|
|
74
73
|
createdAt: string;
|
|
74
|
+
lastSeenAt: string;
|
|
75
75
|
}>;
|
|
76
76
|
locators: Record<string, {
|
|
77
77
|
observedAt: string;
|
|
78
|
-
root: string;
|
|
79
78
|
platform: string;
|
|
80
79
|
workspaceId: string;
|
|
80
|
+
root: string;
|
|
81
81
|
kind?: "checkout" | "worktree" | undefined;
|
|
82
82
|
}>;
|
|
83
83
|
}, {
|
|
84
84
|
version: 1;
|
|
85
85
|
workspaces?: Record<string, {
|
|
86
|
-
lastSeenAt: string;
|
|
87
86
|
workspaceId: string;
|
|
88
87
|
createdAt: string;
|
|
88
|
+
lastSeenAt: string;
|
|
89
89
|
aliases?: string[] | undefined;
|
|
90
90
|
adoptionScope?: "local" | "project" | undefined;
|
|
91
91
|
}> | undefined;
|
|
92
92
|
locators?: Record<string, {
|
|
93
93
|
observedAt: string;
|
|
94
|
-
root: string;
|
|
95
94
|
platform: string;
|
|
96
95
|
workspaceId: string;
|
|
96
|
+
root: string;
|
|
97
97
|
kind?: "checkout" | "worktree" | undefined;
|
|
98
98
|
}> | undefined;
|
|
99
99
|
}>;
|
|
@@ -11,16 +11,16 @@ export declare const CanonicalSourceSpec: z.ZodObject<{
|
|
|
11
11
|
id: string;
|
|
12
12
|
paths: string[];
|
|
13
13
|
provider: "git" | "github";
|
|
14
|
+
$comment?: string | undefined;
|
|
14
15
|
remote?: string | undefined;
|
|
15
16
|
ref?: string | undefined;
|
|
16
|
-
$comment?: string | undefined;
|
|
17
17
|
}, {
|
|
18
18
|
id: string;
|
|
19
19
|
provider: "git" | "github";
|
|
20
20
|
paths?: string[] | undefined;
|
|
21
|
+
$comment?: string | undefined;
|
|
21
22
|
remote?: string | undefined;
|
|
22
23
|
ref?: string | undefined;
|
|
23
|
-
$comment?: string | undefined;
|
|
24
24
|
}>;
|
|
25
25
|
export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, unknown, unknown>, z.ZodObject<{
|
|
26
26
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -63,34 +63,34 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
63
63
|
id: string;
|
|
64
64
|
paths: string[];
|
|
65
65
|
provider: "git" | "github";
|
|
66
|
+
$comment?: string | undefined;
|
|
66
67
|
remote?: string | undefined;
|
|
67
68
|
ref?: string | undefined;
|
|
68
|
-
$comment?: string | undefined;
|
|
69
69
|
}, {
|
|
70
70
|
id: string;
|
|
71
71
|
provider: "git" | "github";
|
|
72
72
|
paths?: string[] | undefined;
|
|
73
|
+
$comment?: string | undefined;
|
|
73
74
|
remote?: string | undefined;
|
|
74
75
|
ref?: string | undefined;
|
|
75
|
-
$comment?: string | undefined;
|
|
76
76
|
}>, "many">>;
|
|
77
77
|
}, "strip", z.ZodTypeAny, {
|
|
78
78
|
sources: {
|
|
79
79
|
id: string;
|
|
80
80
|
paths: string[];
|
|
81
81
|
provider: "git" | "github";
|
|
82
|
+
$comment?: string | undefined;
|
|
82
83
|
remote?: string | undefined;
|
|
83
84
|
ref?: string | undefined;
|
|
84
|
-
$comment?: string | undefined;
|
|
85
85
|
}[];
|
|
86
86
|
}, {
|
|
87
87
|
sources?: {
|
|
88
88
|
id: string;
|
|
89
89
|
provider: "git" | "github";
|
|
90
90
|
paths?: string[] | undefined;
|
|
91
|
+
$comment?: string | undefined;
|
|
91
92
|
remote?: string | undefined;
|
|
92
93
|
ref?: string | undefined;
|
|
93
|
-
$comment?: string | undefined;
|
|
94
94
|
}[] | undefined;
|
|
95
95
|
}>>;
|
|
96
96
|
monitor: z.ZodDefault<z.ZodObject<{
|
|
@@ -242,20 +242,21 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
242
242
|
capabilities: string[];
|
|
243
243
|
asc?: string | undefined;
|
|
244
244
|
};
|
|
245
|
+
project: {
|
|
246
|
+
scm: string;
|
|
247
|
+
repository: string;
|
|
248
|
+
};
|
|
249
|
+
schemaVersion: 1;
|
|
245
250
|
canonical: {
|
|
246
251
|
sources: {
|
|
247
252
|
id: string;
|
|
248
253
|
paths: string[];
|
|
249
254
|
provider: "git" | "github";
|
|
255
|
+
$comment?: string | undefined;
|
|
250
256
|
remote?: string | undefined;
|
|
251
257
|
ref?: string | undefined;
|
|
252
|
-
$comment?: string | undefined;
|
|
253
258
|
}[];
|
|
254
259
|
};
|
|
255
|
-
project: {
|
|
256
|
-
scm: string;
|
|
257
|
-
repository: string;
|
|
258
|
-
};
|
|
259
260
|
policy: {
|
|
260
261
|
hardDeny: string[];
|
|
261
262
|
softDeny: string[];
|
|
@@ -265,7 +266,6 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
265
266
|
lockedSettings: string[];
|
|
266
267
|
unionLists?: Record<string, string[]> | undefined;
|
|
267
268
|
};
|
|
268
|
-
schemaVersion: 1;
|
|
269
269
|
optionalCapabilities: string[];
|
|
270
270
|
workflow: {
|
|
271
271
|
taskSource: string[];
|
|
@@ -273,6 +273,7 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
273
273
|
blockSource?: string | undefined;
|
|
274
274
|
};
|
|
275
275
|
terminology: Record<string, string>;
|
|
276
|
+
$comment?: string | undefined;
|
|
276
277
|
ownership?: Record<string, {
|
|
277
278
|
paths: string[];
|
|
278
279
|
authorities: string[];
|
|
@@ -282,7 +283,6 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
282
283
|
resource: string;
|
|
283
284
|
adapter: string;
|
|
284
285
|
}[] | undefined;
|
|
285
|
-
$comment?: string | undefined;
|
|
286
286
|
}, {
|
|
287
287
|
id: string;
|
|
288
288
|
project: {
|
|
@@ -301,14 +301,15 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
301
301
|
capabilities?: string[] | undefined;
|
|
302
302
|
asc?: string | undefined;
|
|
303
303
|
} | undefined;
|
|
304
|
+
$comment?: string | undefined;
|
|
304
305
|
canonical?: {
|
|
305
306
|
sources?: {
|
|
306
307
|
id: string;
|
|
307
308
|
provider: "git" | "github";
|
|
308
309
|
paths?: string[] | undefined;
|
|
310
|
+
$comment?: string | undefined;
|
|
309
311
|
remote?: string | undefined;
|
|
310
312
|
ref?: string | undefined;
|
|
311
|
-
$comment?: string | undefined;
|
|
312
313
|
}[] | undefined;
|
|
313
314
|
} | undefined;
|
|
314
315
|
ownership?: Record<string, {
|
|
@@ -329,7 +330,6 @@ export declare const ProjectProfile: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, un
|
|
|
329
330
|
lockedSettings?: string[] | undefined;
|
|
330
331
|
unionLists?: Record<string, string[]> | undefined;
|
|
331
332
|
} | undefined;
|
|
332
|
-
$comment?: string | undefined;
|
|
333
333
|
optionalCapabilities?: string[] | undefined;
|
|
334
334
|
workflow?: {
|
|
335
335
|
$comment?: string | undefined;
|
|
@@ -371,6 +371,7 @@ export declare const OperationalPreset: z.ZodPipeline<z.ZodEffects<z.ZodUnknown,
|
|
|
371
371
|
}>>;
|
|
372
372
|
}, "strip", z.ZodTypeAny, {
|
|
373
373
|
id: string;
|
|
374
|
+
schemaVersion: 1;
|
|
374
375
|
policy: {
|
|
375
376
|
hardDeny?: string[] | undefined;
|
|
376
377
|
softDeny?: string[] | undefined;
|
|
@@ -380,11 +381,11 @@ export declare const OperationalPreset: z.ZodPipeline<z.ZodEffects<z.ZodUnknown,
|
|
|
380
381
|
lockedSettings?: string[] | undefined;
|
|
381
382
|
unionLists?: Record<string, string[]> | undefined;
|
|
382
383
|
};
|
|
383
|
-
schemaVersion: 1;
|
|
384
384
|
$comment?: string | undefined;
|
|
385
385
|
}, {
|
|
386
386
|
id: string;
|
|
387
387
|
schemaVersion: 1;
|
|
388
|
+
$comment?: string | undefined;
|
|
388
389
|
policy?: {
|
|
389
390
|
hardDeny?: string[] | undefined;
|
|
390
391
|
softDeny?: string[] | undefined;
|
|
@@ -394,7 +395,6 @@ export declare const OperationalPreset: z.ZodPipeline<z.ZodEffects<z.ZodUnknown,
|
|
|
394
395
|
lockedSettings?: string[] | undefined;
|
|
395
396
|
unionLists?: Record<string, string[]> | undefined;
|
|
396
397
|
} | undefined;
|
|
397
|
-
$comment?: string | undefined;
|
|
398
398
|
}>>;
|
|
399
399
|
export type OperationalPreset = z.infer<typeof OperationalPreset>;
|
|
400
400
|
/**
|
|
@@ -491,6 +491,7 @@ export declare const UserOverride: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, unkn
|
|
|
491
491
|
realtime?: boolean | undefined;
|
|
492
492
|
roles?: string[] | undefined;
|
|
493
493
|
};
|
|
494
|
+
schemaVersion: 1;
|
|
494
495
|
approval: {
|
|
495
496
|
preferredChannel?: string | undefined;
|
|
496
497
|
messenger?: {
|
|
@@ -507,7 +508,6 @@ export declare const UserOverride: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, unkn
|
|
|
507
508
|
lockedSettings?: string[] | undefined;
|
|
508
509
|
unionLists?: Record<string, string[]> | undefined;
|
|
509
510
|
};
|
|
510
|
-
schemaVersion: 1;
|
|
511
511
|
identity: Record<string, string>;
|
|
512
512
|
monitorIdentities: string[];
|
|
513
513
|
$comment?: string | undefined;
|
|
@@ -520,6 +520,7 @@ export declare const UserOverride: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, unkn
|
|
|
520
520
|
realtime?: boolean | undefined;
|
|
521
521
|
roles?: string[] | undefined;
|
|
522
522
|
} | undefined;
|
|
523
|
+
$comment?: string | undefined;
|
|
523
524
|
approval?: {
|
|
524
525
|
preferredChannel?: string | undefined;
|
|
525
526
|
messenger?: {
|
|
@@ -536,7 +537,6 @@ export declare const UserOverride: z.ZodPipeline<z.ZodEffects<z.ZodUnknown, unkn
|
|
|
536
537
|
lockedSettings?: string[] | undefined;
|
|
537
538
|
unionLists?: Record<string, string[]> | undefined;
|
|
538
539
|
} | undefined;
|
|
539
|
-
$comment?: string | undefined;
|
|
540
540
|
identity?: Record<string, string> | undefined;
|
|
541
541
|
monitorIdentities?: string[] | undefined;
|
|
542
542
|
}>>;
|
|
@@ -586,13 +586,13 @@ export declare const ProfileLock: z.ZodObject<{
|
|
|
586
586
|
configurationDigest: z.ZodString;
|
|
587
587
|
generatedAt: z.ZodString;
|
|
588
588
|
}, "strip", z.ZodTypeAny, {
|
|
589
|
+
schemaVersion: 1;
|
|
589
590
|
profile: {
|
|
590
591
|
id: string;
|
|
591
592
|
source: string;
|
|
592
593
|
digest: string;
|
|
593
594
|
};
|
|
594
595
|
capabilities: string[];
|
|
595
|
-
schemaVersion: 1;
|
|
596
596
|
ascCore: {
|
|
597
597
|
version: string;
|
|
598
598
|
commit?: string | undefined;
|
|
@@ -607,12 +607,12 @@ export declare const ProfileLock: z.ZodObject<{
|
|
|
607
607
|
} | undefined;
|
|
608
608
|
overrideDigest?: string | undefined;
|
|
609
609
|
}, {
|
|
610
|
+
schemaVersion: 1;
|
|
610
611
|
profile: {
|
|
611
612
|
id: string;
|
|
612
613
|
source: string;
|
|
613
614
|
digest: string;
|
|
614
615
|
};
|
|
615
|
-
schemaVersion: 1;
|
|
616
616
|
ascCore: {
|
|
617
617
|
version: string;
|
|
618
618
|
commit?: string | undefined;
|
package/package.json
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@asc-agent/runtime",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "ASC (Agent Session Control) — local-first human-in-the-loop agent control plane: core, CLI, and adapters",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"agent",
|
|
7
|
-
"control-plane",
|
|
8
|
-
"human-in-the-loop",
|
|
9
|
-
"claude-code",
|
|
10
|
-
"local-first",
|
|
11
|
-
"session"
|
|
12
|
-
],
|
|
13
|
-
"homepage": "https://github.com/colosair/asc#readme",
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/colosair/asc/issues"
|
|
16
|
-
},
|
|
17
|
-
"repository": {
|
|
18
|
-
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/colosair/asc.git",
|
|
20
|
-
"directory": "packages/runtime"
|
|
21
|
-
},
|
|
22
|
-
"author": "colosair (https://github.com/colosair)",
|
|
23
|
-
"type": "module",
|
|
24
|
-
"bin": {
|
|
25
|
-
"asc": "./dist/cli/asc.js"
|
|
26
|
-
},
|
|
27
|
-
"main": "./dist/cli/asc.js",
|
|
28
|
-
"types": "./dist/cli/asc.d.ts",
|
|
29
|
-
"exports": {
|
|
30
|
-
".": {
|
|
31
|
-
"types": "./dist/cli/asc.d.ts",
|
|
32
|
-
"default": "./dist/cli/asc.js"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"files": [
|
|
36
|
-
"dist",
|
|
37
|
-
"README.md"
|
|
38
|
-
],
|
|
39
|
-
"engines": {
|
|
40
|
-
"node": ">=24"
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"build": "node scripts/build.mjs",
|
|
44
|
-
"prepack": "node scripts/build.mjs",
|
|
45
|
-
"test": "node --test \"tests/*.test.ts\"",
|
|
46
|
-
"dist:smoke": "node scripts/dist-smoke.mjs"
|
|
47
|
-
},
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"zod": "^3.25.76"
|
|
50
|
-
},
|
|
51
|
-
"license": "ISC",
|
|
52
|
-
"publishConfig": {
|
|
53
|
-
"access": "public"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@asc-agent/runtime",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "ASC (Agent Session Control) — local-first human-in-the-loop agent control plane: core, CLI, and adapters",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"agent",
|
|
7
|
+
"control-plane",
|
|
8
|
+
"human-in-the-loop",
|
|
9
|
+
"claude-code",
|
|
10
|
+
"local-first",
|
|
11
|
+
"session"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/colosair/asc#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/colosair/asc/issues"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/colosair/asc.git",
|
|
20
|
+
"directory": "packages/runtime"
|
|
21
|
+
},
|
|
22
|
+
"author": "colosair (https://github.com/colosair)",
|
|
23
|
+
"type": "module",
|
|
24
|
+
"bin": {
|
|
25
|
+
"asc": "./dist/cli/asc.js"
|
|
26
|
+
},
|
|
27
|
+
"main": "./dist/cli/asc.js",
|
|
28
|
+
"types": "./dist/cli/asc.d.ts",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/cli/asc.d.ts",
|
|
32
|
+
"default": "./dist/cli/asc.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"README.md"
|
|
38
|
+
],
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=24"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "node scripts/build.mjs",
|
|
44
|
+
"prepack": "node scripts/build.mjs",
|
|
45
|
+
"test": "node --test \"tests/*.test.ts\"",
|
|
46
|
+
"dist:smoke": "node scripts/dist-smoke.mjs"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"zod": "^3.25.76"
|
|
50
|
+
},
|
|
51
|
+
"license": "ISC",
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|