@automaton-labs/aib 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +578 -0
- package/dist/bin/aib.js +2 -0
- package/dist/bin/cli.js +3 -0
- package/dist/client/http-client.js +1 -0
- package/dist/client/transport-options.js +1 -0
- package/dist/client/websocket-client.js +1 -0
- package/dist/commands/add-missing-imports-preview-cache.js +2 -0
- package/dist/commands/add-missing-imports.js +2 -0
- package/dist/commands/apply-module-plan.js +3 -0
- package/dist/commands/captured-input.js +2 -0
- package/dist/commands/config-command.js +3 -0
- package/dist/commands/diagnostics-command.js +3 -0
- package/dist/commands/doctor.js +1 -0
- package/dist/commands/entity-resolution.js +1 -0
- package/dist/commands/execution-command.js +1 -0
- package/dist/commands/feedback-command.js +3 -0
- package/dist/commands/find-importers.js +1 -0
- package/dist/commands/find-unused-imports.js +1 -0
- package/dist/commands/generate-docs-command.js +6 -0
- package/dist/commands/help-command.js +3 -0
- package/dist/commands/imports-command.js +1 -0
- package/dist/commands/init-skill-usage.js +3 -0
- package/dist/commands/init-workspace.js +3 -0
- package/dist/commands/inspect-cycles.js +5 -0
- package/dist/commands/inspect-format.js +18 -0
- package/dist/commands/inspect-graph.js +9 -0
- package/dist/commands/inspect-imports.js +2 -0
- package/dist/commands/inspect-symbol-query.js +1 -0
- package/dist/commands/inspect-tree.js +5 -0
- package/dist/commands/inspect.js +16 -0
- package/dist/commands/json-file-input.js +1 -0
- package/dist/commands/list-instances.js +1 -0
- package/dist/commands/module-plan-cache.js +2 -0
- package/dist/commands/module-plan-command.js +1 -0
- package/dist/commands/module-plan-timeout.js +1 -0
- package/dist/commands/move-command.js +1 -0
- package/dist/commands/move-preview-cache.js +2 -0
- package/dist/commands/move-to-file.js +2 -0
- package/dist/commands/mutation-execution-cache.js +3 -0
- package/dist/commands/normalize-imports.js +4 -0
- package/dist/commands/observability-command.js +3 -0
- package/dist/commands/ping.js +1 -0
- package/dist/commands/print-config.js +1 -0
- package/dist/commands/quick-read.js +11 -0
- package/dist/commands/refactor-batch-builder.js +1 -0
- package/dist/commands/refactor-batch-execution-cache.js +1 -0
- package/dist/commands/refactor-batch-preview-cache.js +2 -0
- package/dist/commands/refactor-batch.js +4 -0
- package/dist/commands/refactor-command.js +1 -0
- package/dist/commands/rename-command.js +1 -0
- package/dist/commands/rename-entities.js +4 -0
- package/dist/commands/rename-execution-cache.js +1 -0
- package/dist/commands/rename-input.js +1 -0
- package/dist/commands/rename-preview-cache.js +2 -0
- package/dist/commands/result-view.js +6 -0
- package/dist/commands/runtime-command.js +4 -0
- package/dist/commands/runtime-info.js +1 -0
- package/dist/commands/session-workspace.js +31 -0
- package/dist/commands/shared.js +1 -0
- package/dist/commands/sync-command.js +2 -0
- package/dist/commands/validate-module-plan.js +2 -0
- package/dist/commands/workspace-cache.js +1 -0
- package/dist/compatibility/policy.js +1 -0
- package/dist/config/auto-start-ide.js +1 -0
- package/dist/config/defaults.js +1 -0
- package/dist/config/env-vars.js +1 -0
- package/dist/config/glob-match.js +1 -0
- package/dist/config/import-rules.js +1 -0
- package/dist/config/local-config.js +3 -0
- package/dist/config/mutation-comments.js +1 -0
- package/dist/config/path-aliases.js +1 -0
- package/dist/config/path-display.js +1 -0
- package/dist/config/product-storage.js +1 -0
- package/dist/config/resolve-command-alias.js +1 -0
- package/dist/config/resolve.js +1 -0
- package/dist/config/workspace-root.js +3 -0
- package/dist/config/workspace-state.js +1 -0
- package/dist/content/content-bundle.js +1 -0
- package/dist/diagnostics/module-plan-timeline.js +2 -0
- package/dist/diagnostics/readiness-text.js +8 -0
- package/dist/discovery/registry.js +1 -0
- package/dist/discovery/select-instance.js +1 -0
- package/dist/dsl/aib-dsl.js +1 -0
- package/dist/help/bootstrap.md +924 -0
- package/dist/help/diagnostics/doctor.json +70 -0
- package/dist/help/docs/basics.md +14 -0
- package/dist/help/docs/dsl.md +25 -0
- package/dist/help/docs/help-format.md +12 -0
- package/dist/help/docs/imports.normalize.md +36 -0
- package/dist/help/docs/inspect.code.md +29 -0
- package/dist/help/docs/inspect.deps.md +32 -0
- package/dist/help/docs/inspect.duplicates.md +72 -0
- package/dist/help/docs/inspect.exports.md +34 -0
- package/dist/help/docs/inspect.file.md +32 -0
- package/dist/help/docs/inspect.graph.md +112 -0
- package/dist/help/docs/inspect.imports.md +15 -0
- package/dist/help/docs/inspect.md +71 -0
- package/dist/help/docs/inspect.members.md +24 -0
- package/dist/help/docs/inspect.tree.md +30 -0
- package/dist/help/docs/inspect.usages.md +48 -0
- package/dist/help/docs/modulePlan.md +51 -0
- package/dist/help/docs/move.md +37 -0
- package/dist/help/docs/mutation.md +47 -0
- package/dist/help/docs/patterns.md +178 -0
- package/dist/help/docs/prefs.md +40 -0
- package/dist/help/docs/qr.md +33 -0
- package/dist/help/docs/refactor.batch.md +44 -0
- package/dist/help/docs/rename.md +39 -0
- package/dist/help/docs/selectors.md +23 -0
- package/dist/help/docs/session.md +61 -0
- package/dist/help/docs/view.md +30 -0
- package/dist/help/dsl/bootstrap.md +924 -0
- package/dist/help/dsl/docs/basics.md +14 -0
- package/dist/help/dsl/docs/dsl.md +25 -0
- package/dist/help/dsl/docs/help-format.md +12 -0
- package/dist/help/dsl/docs/imports.normalize.md +36 -0
- package/dist/help/dsl/docs/inspect.code.md +29 -0
- package/dist/help/dsl/docs/inspect.deps.md +32 -0
- package/dist/help/dsl/docs/inspect.duplicates.md +72 -0
- package/dist/help/dsl/docs/inspect.exports.md +34 -0
- package/dist/help/dsl/docs/inspect.file.md +32 -0
- package/dist/help/dsl/docs/inspect.graph.md +112 -0
- package/dist/help/dsl/docs/inspect.imports.md +15 -0
- package/dist/help/dsl/docs/inspect.md +71 -0
- package/dist/help/dsl/docs/inspect.members.md +24 -0
- package/dist/help/dsl/docs/inspect.tree.md +30 -0
- package/dist/help/dsl/docs/inspect.usages.md +48 -0
- package/dist/help/dsl/docs/modulePlan.md +51 -0
- package/dist/help/dsl/docs/move.md +37 -0
- package/dist/help/dsl/docs/mutation.md +47 -0
- package/dist/help/dsl/docs/patterns.md +178 -0
- package/dist/help/dsl/docs/prefs.md +40 -0
- package/dist/help/dsl/docs/qr.md +33 -0
- package/dist/help/dsl/docs/refactor.batch.md +44 -0
- package/dist/help/dsl/docs/rename.md +39 -0
- package/dist/help/dsl/docs/selectors.md +23 -0
- package/dist/help/dsl/docs/session.md +61 -0
- package/dist/help/dsl/docs/view.md +30 -0
- package/dist/help/dsl/full.md +924 -0
- package/dist/help/dsl/snippets/agents.md +14 -0
- package/dist/help/dsl/topics/basics.md +12 -0
- package/dist/help/dsl/topics/dsl.md +23 -0
- package/dist/help/dsl/topics/help-format.md +10 -0
- package/dist/help/dsl/topics/imports.normalize.md +34 -0
- package/dist/help/dsl/topics/inspect.code.md +27 -0
- package/dist/help/dsl/topics/inspect.deps.md +30 -0
- package/dist/help/dsl/topics/inspect.duplicates.md +43 -0
- package/dist/help/dsl/topics/inspect.exports.md +32 -0
- package/dist/help/dsl/topics/inspect.file.md +30 -0
- package/dist/help/dsl/topics/inspect.graph.md +110 -0
- package/dist/help/dsl/topics/inspect.imports.md +13 -0
- package/dist/help/dsl/topics/inspect.md +69 -0
- package/dist/help/dsl/topics/inspect.members.md +22 -0
- package/dist/help/dsl/topics/inspect.tree.md +20 -0
- package/dist/help/dsl/topics/inspect.usages.md +46 -0
- package/dist/help/dsl/topics/modulePlan.md +38 -0
- package/dist/help/dsl/topics/move.md +27 -0
- package/dist/help/dsl/topics/mutation.md +45 -0
- package/dist/help/dsl/topics/patterns.md +176 -0
- package/dist/help/dsl/topics/prefs.md +38 -0
- package/dist/help/dsl/topics/qr.md +31 -0
- package/dist/help/dsl/topics/refactor.batch.md +33 -0
- package/dist/help/dsl/topics/rename.md +25 -0
- package/dist/help/dsl/topics/selectors.md +21 -0
- package/dist/help/dsl/topics/session.md +59 -0
- package/dist/help/dsl/topics/view.md +28 -0
- package/dist/help/full.md +924 -0
- package/dist/help/help-meta.json +113 -0
- package/dist/help/index.md +167 -0
- package/dist/help/json/bootstrap.md +1074 -0
- package/dist/help/json/docs/basics.md +15 -0
- package/dist/help/json/docs/dsl.md +25 -0
- package/dist/help/json/docs/help-format.md +12 -0
- package/dist/help/json/docs/imports.normalize.md +47 -0
- package/dist/help/json/docs/inspect.code.md +41 -0
- package/dist/help/json/docs/inspect.deps.md +46 -0
- package/dist/help/json/docs/inspect.duplicates.md +65 -0
- package/dist/help/json/docs/inspect.exports.md +40 -0
- package/dist/help/json/docs/inspect.file.md +38 -0
- package/dist/help/json/docs/inspect.graph.md +139 -0
- package/dist/help/json/docs/inspect.imports.md +15 -0
- package/dist/help/json/docs/inspect.md +87 -0
- package/dist/help/json/docs/inspect.members.md +32 -0
- package/dist/help/json/docs/inspect.tree.md +30 -0
- package/dist/help/json/docs/inspect.usages.md +61 -0
- package/dist/help/json/docs/modulePlan.md +70 -0
- package/dist/help/json/docs/move.md +53 -0
- package/dist/help/json/docs/mutation.md +62 -0
- package/dist/help/json/docs/patterns.md +178 -0
- package/dist/help/json/docs/prefs.md +40 -0
- package/dist/help/json/docs/qr.md +33 -0
- package/dist/help/json/docs/refactor.batch.md +72 -0
- package/dist/help/json/docs/rename.md +47 -0
- package/dist/help/json/docs/selectors.md +23 -0
- package/dist/help/json/docs/session.md +77 -0
- package/dist/help/json/docs/view.md +30 -0
- package/dist/help/json/full.md +1074 -0
- package/dist/help/json/snippets/agents.md +14 -0
- package/dist/help/json/topics/basics.md +13 -0
- package/dist/help/json/topics/dsl.md +23 -0
- package/dist/help/json/topics/help-format.md +10 -0
- package/dist/help/json/topics/imports.normalize.md +45 -0
- package/dist/help/json/topics/inspect.code.md +39 -0
- package/dist/help/json/topics/inspect.deps.md +44 -0
- package/dist/help/json/topics/inspect.duplicates.md +37 -0
- package/dist/help/json/topics/inspect.exports.md +38 -0
- package/dist/help/json/topics/inspect.file.md +36 -0
- package/dist/help/json/topics/inspect.graph.md +137 -0
- package/dist/help/json/topics/inspect.imports.md +13 -0
- package/dist/help/json/topics/inspect.md +85 -0
- package/dist/help/json/topics/inspect.members.md +30 -0
- package/dist/help/json/topics/inspect.tree.md +20 -0
- package/dist/help/json/topics/inspect.usages.md +59 -0
- package/dist/help/json/topics/modulePlan.md +57 -0
- package/dist/help/json/topics/move.md +43 -0
- package/dist/help/json/topics/mutation.md +60 -0
- package/dist/help/json/topics/patterns.md +176 -0
- package/dist/help/json/topics/prefs.md +38 -0
- package/dist/help/json/topics/qr.md +31 -0
- package/dist/help/json/topics/refactor.batch.md +61 -0
- package/dist/help/json/topics/rename.md +42 -0
- package/dist/help/json/topics/selectors.md +21 -0
- package/dist/help/json/topics/session.md +59 -0
- package/dist/help/json/topics/view.md +28 -0
- package/dist/help/snippets/agents.md +14 -0
- package/dist/help/topics/basics.md +12 -0
- package/dist/help/topics/dsl.md +23 -0
- package/dist/help/topics/help-format.md +10 -0
- package/dist/help/topics/imports.normalize.md +34 -0
- package/dist/help/topics/inspect.code.md +27 -0
- package/dist/help/topics/inspect.deps.md +30 -0
- package/dist/help/topics/inspect.duplicates.md +43 -0
- package/dist/help/topics/inspect.exports.md +32 -0
- package/dist/help/topics/inspect.file.md +30 -0
- package/dist/help/topics/inspect.graph.md +110 -0
- package/dist/help/topics/inspect.imports.md +13 -0
- package/dist/help/topics/inspect.md +69 -0
- package/dist/help/topics/inspect.members.md +22 -0
- package/dist/help/topics/inspect.tree.md +20 -0
- package/dist/help/topics/inspect.usages.md +46 -0
- package/dist/help/topics/modulePlan.md +38 -0
- package/dist/help/topics/move.md +27 -0
- package/dist/help/topics/mutation.md +45 -0
- package/dist/help/topics/patterns.md +176 -0
- package/dist/help/topics/prefs.md +38 -0
- package/dist/help/topics/qr.md +31 -0
- package/dist/help/topics/refactor.batch.md +33 -0
- package/dist/help/topics/rename.md +25 -0
- package/dist/help/topics/selectors.md +21 -0
- package/dist/help/topics/session.md +59 -0
- package/dist/help/topics/view.md +28 -0
- package/dist/ide-launch/common.cjs +162 -0
- package/dist/managed-host/extension-vsix-resolver.js +1 -0
- package/dist/managed-host/manage-serve-web-host.cjs +141 -0
- package/dist/managed-host/serve-web-autostart.js +1 -0
- package/dist/managed-host/serve-web-host.cjs +1790 -0
- package/dist/metrics/central-metrics.js +2 -0
- package/dist/observability/config.js +1 -0
- package/dist/observability/context.js +1 -0
- package/dist/observability/failure-snapshot.js +2 -0
- package/dist/observability/recent.js +2 -0
- package/dist/payloads/read-stdin-json.js +1 -0
- package/dist/runtime/bundled-node.js +1 -0
- package/dist/runtime/input-source.js +1 -0
- package/dist/runtime/managed-runtime-provisioning.js +1 -0
- package/dist/runtime/run-command.js +1 -0
- package/dist/selectors/parse-entities.js +1 -0
- package/dist/session/client.js +1 -0
- package/dist/session/paths.js +1 -0
- package/dist/session/server.js +6 -0
- package/dist/shared/agent-text.js +1 -0
- package/dist/shared/diagnostic-catalog.js +1 -0
- package/dist/shared/diagnostics.js +1 -0
- package/dist/shared/errors.js +28 -0
- package/dist/shared/event-loop.js +1 -0
- package/dist/shared/hints.js +1 -0
- package/dist/shared/metrics.js +1 -0
- package/dist/shared/operations.js +1 -0
- package/dist/shared/presentation.js +4 -0
- package/dist/shared/protocol.js +1 -0
- package/dist/shared/routes.js +1 -0
- package/dist/shared/stdout.js +2 -0
- package/dist/shared/types.js +1 -0
- package/dist/tracing/config.js +2 -0
- package/dist/tracing/trace.js +3 -0
- package/extension/vscode-refactor-bridge-extension.vsix +0 -0
- package/package.json +39 -0
- package/runtimes/launcher/win-x64/aib.exe +0 -0
- package/scripts/install-windows-launcher.cjs +58 -0
- package/scripts/postinstall.cjs +28 -0
- package/scripts/provision-runtime.cjs +299 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Inspect Usages
|
|
2
|
+
|
|
3
|
+
Use usages to find who references a file, directory, or entity inside a scope.
|
|
4
|
+
It reports real references, not unused imports or text matches.
|
|
5
|
+
For broad impact checks, target-local usages are hidden automatically when the target is inside a wider scope.
|
|
6
|
+
Use includeTarget only when references inside the target file or directory matter.
|
|
7
|
+
|
|
8
|
+
Good for:
|
|
9
|
+
- checking impact before changing behavior
|
|
10
|
+
- finding consumers of an entity or module area
|
|
11
|
+
- confirming whether extracted or renamed code still has callers
|
|
12
|
+
- getting caller locations or caller code without broad file scans
|
|
13
|
+
|
|
14
|
+
Use locations for broad impact checks.
|
|
15
|
+
Use code when usage count is small or caller context matters now.
|
|
16
|
+
|
|
17
|
+
Controls:
|
|
18
|
+
target, scope, entity, entities, parent, detail, limit, all, save, includeTarget
|
|
19
|
+
|
|
20
|
+
Specific:
|
|
21
|
+
includeTarget include references inside the target file/directory; +includeTarget
|
|
22
|
+
|
|
23
|
+
Prefs:
|
|
24
|
+
inspect.usages.maxLocations
|
|
25
|
+
inspect.usages.maxCodeBlocks
|
|
26
|
+
|
|
27
|
+
Run:
|
|
28
|
+
aib inspect --stdin
|
|
29
|
+
|
|
30
|
+
Input:
|
|
31
|
+
{
|
|
32
|
+
"op": "usages",
|
|
33
|
+
"target": "src/service.ts",
|
|
34
|
+
"entities": [
|
|
35
|
+
"createService",
|
|
36
|
+
{ "parent": "Service", "entities": ["render", "reset"] }
|
|
37
|
+
],
|
|
38
|
+
"scope": ["src/app", "src/tests"],
|
|
39
|
+
"detail": "locations",
|
|
40
|
+
"save": "service-usages"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
inspect usages src/service.ts createService --scope src --detail locations [--limit N] [--all] [--save name]
|
|
44
|
+
|
|
45
|
+
Expand saved usages by focusing the reusable usages index:
|
|
46
|
+
inspect usages --from-file aib:usages:service-usages --focus createService --detail code
|
|
47
|
+
|
|
48
|
+
Use the saved usages handle with --from-file/from to focus or expand the reusable index.
|
|
49
|
+
|
|
50
|
+
Directory target:
|
|
51
|
+
Run:
|
|
52
|
+
aib inspect --stdin
|
|
53
|
+
|
|
54
|
+
Input:
|
|
55
|
+
{
|
|
56
|
+
"op": "usages",
|
|
57
|
+
"target": "src/shared",
|
|
58
|
+
"scope": ["src/app", "src/renderer"],
|
|
59
|
+
"detail": "summary",
|
|
60
|
+
"save": "shared-usages"
|
|
61
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Module Plan
|
|
2
|
+
|
|
3
|
+
Modes: preview/apply or execute.
|
|
4
|
+
Use execute for routine changes.
|
|
5
|
+
Use preview/apply when learning a mutation command or inspecting a large multi-step request before writing files.
|
|
6
|
+
|
|
7
|
+
If a name is ambiguous, use selectors.
|
|
8
|
+
Run help selectors to refresh selector syntax.
|
|
9
|
+
|
|
10
|
+
modulePlan is for splitting large files into smaller modules.
|
|
11
|
+
Use it when a large file should be refactored into several target files.
|
|
12
|
+
|
|
13
|
+
modulePlan orchestrates semantic moves and updates affected references/imports.
|
|
14
|
+
|
|
15
|
+
Use expectEmpty when your modulePlan intent is to move all declarations out of the source file.
|
|
16
|
+
It does not change the move behavior; it only asks output to report remaining source declarations if any remain.
|
|
17
|
+
Use it only when remaining declarations would mean the split did not match your intent.
|
|
18
|
+
Do not use it for partial extractions.
|
|
19
|
+
|
|
20
|
+
Plan:
|
|
21
|
+
modulePlan preview --stdin
|
|
22
|
+
modulePlan execute --stdin
|
|
23
|
+
modulePlan apply <planId>
|
|
24
|
+
|
|
25
|
+
Use preview/apply when you want to inspect the plan before writing files.
|
|
26
|
+
Use execute when you want to preview and apply immediately.
|
|
27
|
+
Use --from with captured input handles when rerunning edited large plans.
|
|
28
|
+
|
|
29
|
+
Split one large source file into several targets:
|
|
30
|
+
Run:
|
|
31
|
+
aib modulePlan execute --stdin
|
|
32
|
+
|
|
33
|
+
Input:
|
|
34
|
+
{
|
|
35
|
+
"sourceFile": "src/large-service.ts",
|
|
36
|
+
"expectEmpty": true,
|
|
37
|
+
"modules": [
|
|
38
|
+
{
|
|
39
|
+
"target": "src/large-service.types.ts",
|
|
40
|
+
"entities": ["ServiceOptions", "ServiceMode"]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"target": "src/large-service.core.ts",
|
|
44
|
+
"entities": ["LargeService", "createLargeService"]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
modulePlan is better than many separate move requests when one large source file should be split into several target files.
|
|
50
|
+
|
|
51
|
+
Preferred JSON fields:
|
|
52
|
+
sourceFile file being split
|
|
53
|
+
modules target groups
|
|
54
|
+
target output file for one group
|
|
55
|
+
entities symbols moved into that target
|
|
56
|
+
|
|
57
|
+
Target files are created when needed.
|
|
58
|
+
The order in the request describes intent; rely on TS/IDE refactors for reference and import updates.
|
|
59
|
+
|
|
60
|
+
If a large or partial modulePlan request fails, edit the captured input file and rerun with --from.
|
|
61
|
+
For small one-off modulePlan requests, write a corrected request instead.
|
|
62
|
+
|
|
63
|
+
Latest modulePlan input:
|
|
64
|
+
<session-dir>/inputs/modulePlan/_last.json
|
|
65
|
+
|
|
66
|
+
Handle:
|
|
67
|
+
aib:input:modulePlan:last
|
|
68
|
+
|
|
69
|
+
Example:
|
|
70
|
+
modulePlan preview --from aib:input:modulePlan:last
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Move
|
|
2
|
+
|
|
3
|
+
Modes: preview/apply or execute.
|
|
4
|
+
Use execute for routine changes.
|
|
5
|
+
Use preview/apply when learning a mutation command or inspecting a large multi-step request before writing files.
|
|
6
|
+
|
|
7
|
+
If a name is ambiguous, use selectors.
|
|
8
|
+
Run help selectors to refresh selector syntax.
|
|
9
|
+
|
|
10
|
+
Move transfers one or more symbols from one file to another.
|
|
11
|
+
Move is semantic; it moves supported declarations and updates affected imports/references.
|
|
12
|
+
Use it for focused extraction into a single target file.
|
|
13
|
+
For large file splitting across several target files, use modulePlan.
|
|
14
|
+
|
|
15
|
+
Move to file:
|
|
16
|
+
move toFile preview --stdin
|
|
17
|
+
move toFile execute --stdin
|
|
18
|
+
move toFile apply <previewId>
|
|
19
|
+
|
|
20
|
+
Use preview/apply when you want to inspect the planned change before writing files.
|
|
21
|
+
Use execute when you want to write immediately.
|
|
22
|
+
Use --from with captured input handles when rerunning edited large requests.
|
|
23
|
+
|
|
24
|
+
Move several entities into one target:
|
|
25
|
+
Run:
|
|
26
|
+
aib move toFile execute --stdin
|
|
27
|
+
|
|
28
|
+
Input:
|
|
29
|
+
{
|
|
30
|
+
"sourceFile": "src/service.ts",
|
|
31
|
+
"targetFile": "src/service.helpers.ts",
|
|
32
|
+
"entities": ["oldHelper", "OtherHelper"]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Move creates the target file when needed.
|
|
36
|
+
The target can already exist.
|
|
37
|
+
|
|
38
|
+
The request means:
|
|
39
|
+
take entities from sourceFile and move them into targetFile.
|
|
40
|
+
|
|
41
|
+
Use refactor batch when the same workflow needs both rename and move steps.
|
|
42
|
+
|
|
43
|
+
If a large move request fails, edit the captured input file and rerun with --from.
|
|
44
|
+
For small one-off move requests, write a corrected request instead.
|
|
45
|
+
|
|
46
|
+
Latest move input:
|
|
47
|
+
<session-dir>/inputs/move/_last.json
|
|
48
|
+
|
|
49
|
+
Handle:
|
|
50
|
+
aib:input:move:last
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
move toFile preview --from aib:input:move:last
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Mutation
|
|
2
|
+
|
|
3
|
+
Mutation commands change code through TS/IDE refactors.
|
|
4
|
+
Successful mutations update affected references and imports.
|
|
5
|
+
|
|
6
|
+
After a successful mutation, do not manually patch the same imports unless aib reports a follow-up or checks show a real issue.
|
|
7
|
+
|
|
8
|
+
AIB mutations are designed to reduce manual checking.
|
|
9
|
+
Your job is to express the intent in DSL.
|
|
10
|
+
AIB's job is to convert that intent into code changes.
|
|
11
|
+
|
|
12
|
+
Do not read all changed files just because a mutation touched them.
|
|
13
|
+
That defeats the purpose of using AIB for mechanical refactors.
|
|
14
|
+
|
|
15
|
+
If the command succeeds, the requested mechanical change was applied.
|
|
16
|
+
After failure or partial success, use the output to decide the next request.
|
|
17
|
+
|
|
18
|
+
When running mutation commands, set the harness timeout to 3 minutes.
|
|
19
|
+
If the harness stops waiting before final output appears, recover with:
|
|
20
|
+
|
|
21
|
+
aib execution status last
|
|
22
|
+
|
|
23
|
+
Modes:
|
|
24
|
+
preview inspect planned edits, then apply by id
|
|
25
|
+
apply write a previewed change
|
|
26
|
+
execute write immediately
|
|
27
|
+
|
|
28
|
+
Use execute for routine rename/move/modulePlan requests.
|
|
29
|
+
|
|
30
|
+
Use preview/apply when you are learning a mutation command, or when one request contains a large multi-step change that you want to inspect before writing files.
|
|
31
|
+
Typical examples: a huge modulePlan or refactor batch.
|
|
32
|
+
|
|
33
|
+
preview/apply uses more tool calls and more output tokens.
|
|
34
|
+
preview validates input and planned edits, but writing files can still hit a TS/IDE refactor error.
|
|
35
|
+
execute writes immediately and reports what changed.
|
|
36
|
+
|
|
37
|
+
If a mutation cannot be completed, aib reports the failed part and the captured input.
|
|
38
|
+
For large or partial requests, edit the captured input and rerun the remaining or changed intent.
|
|
39
|
+
For small requests, write a corrected request instead.
|
|
40
|
+
|
|
41
|
+
Prefer batch JSON for related mutations.
|
|
42
|
+
One request can describe several related changes.
|
|
43
|
+
aib captures JSON input automatically so large failed or partial requests can be edited and rerun.
|
|
44
|
+
|
|
45
|
+
When a batch mutation partly fails, split the next request by failure type.
|
|
46
|
+
|
|
47
|
+
If the failure is wrong input, fix the selector/entity/file and run the corrected remaining intent.
|
|
48
|
+
If TS/IDE cannot apply one part of the batch, do not treat the whole intent as failed.
|
|
49
|
+
Run the next request without the failed part and let aib report any later failures.
|
|
50
|
+
Then decide whether failed parts need smaller requests or manual fallback.
|
|
51
|
+
|
|
52
|
+
If a large or partial mutation request fails, edit the captured input file and rerun with --from.
|
|
53
|
+
For small one-off requests, write a corrected request instead.
|
|
54
|
+
|
|
55
|
+
Latest mutation inputs:
|
|
56
|
+
<session-dir>/inputs/rename/_last.json
|
|
57
|
+
<session-dir>/inputs/move/_last.json
|
|
58
|
+
<session-dir>/inputs/refactor/_last.json
|
|
59
|
+
<session-dir>/inputs/modulePlan/_last.json
|
|
60
|
+
|
|
61
|
+
Example:
|
|
62
|
+
rename preview --from aib:input:rename:last
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Working Patterns
|
|
2
|
+
|
|
3
|
+
Use aib before broad file reads when the question is about TS/JS structure, references, dependencies, or focused code.
|
|
4
|
+
Use normal text search when the question is just text.
|
|
5
|
+
|
|
6
|
+
For a first pass in a new codebase, map directories before reading files:
|
|
7
|
+
|
|
8
|
+
tree src depth=5 +onlyDirs limit=200
|
|
9
|
+
|
|
10
|
+
Start compact for broad scans.
|
|
11
|
+
Use summary, locations, or local graph views first when output could be large.
|
|
12
|
+
Expand to code or wider graph views only for the parts that matter now.
|
|
13
|
+
If output hides data and shows `view: aib:res_<id>`, use `aib view ...` to fetch only the hidden part instead of repeating the original request.
|
|
14
|
+
|
|
15
|
+
Compact output is a starting point, not a substitute for needed code.
|
|
16
|
+
Fetch exact code when correctness depends on implementation details.
|
|
17
|
+
|
|
18
|
+
Use prefs when the current phase repeats the same output shape.
|
|
19
|
+
Turn details off when they stop helping.
|
|
20
|
+
Turn them back on when they matter.
|
|
21
|
+
|
|
22
|
+
Use @file only when several following operations share the same file.
|
|
23
|
+
For independent one-off file requests, pass the path directly:
|
|
24
|
+
file @svc/a.ts
|
|
25
|
+
code @svc/b.ts ServiceB
|
|
26
|
+
|
|
27
|
+
AIB mutations are designed to reduce manual checking.
|
|
28
|
+
Your job is to express the intent in DSL.
|
|
29
|
+
AIB's job is to convert that intent into code changes.
|
|
30
|
+
|
|
31
|
+
Do not read all changed files just because a mutation touched them.
|
|
32
|
+
That defeats the purpose of using AIB for mechanical refactors.
|
|
33
|
+
|
|
34
|
+
If the command succeeds, the requested mechanical change was applied.
|
|
35
|
+
After failure or partial success, use the output to decide the next request.
|
|
36
|
+
|
|
37
|
+
For mutation commands, set the shell/tool harness timeout to 3 minutes.
|
|
38
|
+
|
|
39
|
+
If a mutation command times out or returns no final output, use:
|
|
40
|
+
|
|
41
|
+
aib execution status last
|
|
42
|
+
|
|
43
|
+
This is an escape hatch for recovering the latest mutation status/result.
|
|
44
|
+
|
|
45
|
+
Before repeated mutation work, check aib config:
|
|
46
|
+
|
|
47
|
+
aib config
|
|
48
|
+
|
|
49
|
+
Set pathAliases for repeated request paths.
|
|
50
|
+
Set importRules so move/modulePlan create imports in the project style.
|
|
51
|
+
|
|
52
|
+
This avoids repeating long paths in requests and avoids manual import cleanup after mutations.
|
|
53
|
+
Do this before large move/modulePlan work, not after cleanup becomes repetitive.
|
|
54
|
+
|
|
55
|
+
Example aib.json config:
|
|
56
|
+
|
|
57
|
+
{
|
|
58
|
+
"pathAliases": {
|
|
59
|
+
"svc": "src/services",
|
|
60
|
+
"cli": "packages/cli/src",
|
|
61
|
+
"ext": "packages/extension/src"
|
|
62
|
+
},
|
|
63
|
+
"importRules": [
|
|
64
|
+
{
|
|
65
|
+
"scope": ".",
|
|
66
|
+
"specifier": "shortest",
|
|
67
|
+
"ending": "auto",
|
|
68
|
+
"builtin": "bare",
|
|
69
|
+
"unusedImports": "remove"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"importNormalize": [
|
|
73
|
+
{
|
|
74
|
+
"scope": "src",
|
|
75
|
+
"to": "shortestAlias",
|
|
76
|
+
"exclude": ["src/generated"]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"inspect.graph.exclude": [
|
|
80
|
+
"**/* copy.ts"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
pathAliases define short request aliases for paths agents repeat in aib commands.
|
|
85
|
+
Use them to reduce input tokens for repeated inspect and mutation work.
|
|
86
|
+
|
|
87
|
+
Aliases are for aib request paths. They do not change TypeScript imports by themselves.
|
|
88
|
+
For import style after mutations, use importRules.
|
|
89
|
+
|
|
90
|
+
importRules control imports created or expanded by move/modulePlan mutation cleanup.
|
|
91
|
+
They do not rewrite the whole project.
|
|
92
|
+
|
|
93
|
+
AIB starts from IDE/TS import preferences.
|
|
94
|
+
For mutation cleanup, matching importRules in aib.json take priority.
|
|
95
|
+
|
|
96
|
+
Do not assume IDE/TS defaults match the repo style.
|
|
97
|
+
Set importRules before large move/modulePlan work so imports do not need manual cleanup.
|
|
98
|
+
|
|
99
|
+
Fields:
|
|
100
|
+
scope repo-relative file or directory scope; most specific scope wins
|
|
101
|
+
specifier relative|shortest|project-relative|non-relative
|
|
102
|
+
ending auto|minimal|index|js
|
|
103
|
+
builtin node|bare
|
|
104
|
+
unusedImports remove|preserve
|
|
105
|
+
|
|
106
|
+
Defaults:
|
|
107
|
+
specifier omitted IDE/TS decides
|
|
108
|
+
ending omitted IDE/TS decides
|
|
109
|
+
builtin omitted keep TS/project builtin style
|
|
110
|
+
unusedImports omitted keep unused imports
|
|
111
|
+
|
|
112
|
+
specifier:
|
|
113
|
+
relative best for local relative imports
|
|
114
|
+
shortest best for shortest valid alias/path output
|
|
115
|
+
project-relative best for root-relative project imports
|
|
116
|
+
non-relative best for package or alias imports
|
|
117
|
+
|
|
118
|
+
ending:
|
|
119
|
+
minimal best for extensionless TS imports
|
|
120
|
+
js best for ESM-style TS projects that require .js
|
|
121
|
+
auto leaves the decision to TypeScript
|
|
122
|
+
index best for explicit index import style
|
|
123
|
+
|
|
124
|
+
builtin:
|
|
125
|
+
node path -> node:path; best for explicit Node builtin imports
|
|
126
|
+
bare node:path -> path; best for bare Node builtin imports
|
|
127
|
+
omit field keeps TypeScript/project output; add builtin if agents keep fixing this manually
|
|
128
|
+
|
|
129
|
+
unusedImports:
|
|
130
|
+
remove clean unused imports in mutation-touched files
|
|
131
|
+
preserve keep unused imports
|
|
132
|
+
omit same as preserve
|
|
133
|
+
|
|
134
|
+
Mutation-touched files are files where TS produced edits: source/target files and any reference/update files TS changed.
|
|
135
|
+
Recommended value: remove
|
|
136
|
+
|
|
137
|
+
importNormalize defines reusable defaults for aib imports normalize.
|
|
138
|
+
Use it when the same normalize request would otherwise be repeated.
|
|
139
|
+
|
|
140
|
+
It affects explicit import normalize commands only.
|
|
141
|
+
It does not run automatically during move/modulePlan; use importRules for mutation-time cleanup.
|
|
142
|
+
|
|
143
|
+
Fields:
|
|
144
|
+
scope repo-relative file or directory scope; most specific scope wins
|
|
145
|
+
to relative|alias|shortestAlias
|
|
146
|
+
preferAlias tsconfig paths pattern used when to=alias
|
|
147
|
+
exclude files, directories, or glob-like patterns to skip
|
|
148
|
+
|
|
149
|
+
to:
|
|
150
|
+
relative rewrite resolved local imports to relative paths
|
|
151
|
+
alias rewrite resolved local imports to a matching tsconfig alias
|
|
152
|
+
shortestAlias rewrite to the shortest valid alias specifier
|
|
153
|
+
|
|
154
|
+
preferAlias:
|
|
155
|
+
@shared/* prefer one alias pattern when several aliases can resolve the same file
|
|
156
|
+
|
|
157
|
+
inspect.graph.exclude skips files before graph builds the model.
|
|
158
|
+
Use it for generated files, backups, local copies, or other paths that make graph output noisy.
|
|
159
|
+
|
|
160
|
+
Excluded files do not affect graph counts, hubs, entrypoints, leaves, edges, imports, importedBy, or saved graph files.
|
|
161
|
+
|
|
162
|
+
Leave feedback while working.
|
|
163
|
+
|
|
164
|
+
aib is built for agents. Agent feedback is the main signal for improving output, docs, mutations, and token efficiency.
|
|
165
|
+
|
|
166
|
+
Use feedback when something is wrong, unclear, noisy, or could be more efficient.
|
|
167
|
+
|
|
168
|
+
Format:
|
|
169
|
+
feedback "kind | message"
|
|
170
|
+
feedback "kind | topic | message"
|
|
171
|
+
|
|
172
|
+
Kinds:
|
|
173
|
+
bug, confusion, friction, idea, other
|
|
174
|
+
|
|
175
|
+
Topic is optional. Choose any short topic that helps classify the feedback.
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
feedback "friction | imports | normalize required manual cleanup"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Prefs
|
|
2
|
+
|
|
3
|
+
Prefs change defaults for the active session.
|
|
4
|
+
Use them when you want repeated CLI behavior without repeating request fields.
|
|
5
|
+
|
|
6
|
+
Set prefs:
|
|
7
|
+
session prefs set <name> <value> [<name> <value>...]
|
|
8
|
+
|
|
9
|
+
Example:
|
|
10
|
+
session prefs set inspect.graph.hubs false inspect.graph.leaves false
|
|
11
|
+
|
|
12
|
+
Show prefs:
|
|
13
|
+
session prefs get [prefix] [--all]
|
|
14
|
+
|
|
15
|
+
By default, get shows session overrides.
|
|
16
|
+
--all includes defaults.
|
|
17
|
+
prefix filters keys.
|
|
18
|
+
|
|
19
|
+
boolean = true|false
|
|
20
|
+
N = integer
|
|
21
|
+
|
|
22
|
+
Available prefs:
|
|
23
|
+
inspect.code.maxNonEmptyLines N
|
|
24
|
+
inspect.usages.maxLocations N
|
|
25
|
+
inspect.usages.maxCodeBlocks N
|
|
26
|
+
inspect.members.maxItems N
|
|
27
|
+
inspect.members.all boolean
|
|
28
|
+
inspect.graph.hubs boolean
|
|
29
|
+
inspect.graph.entrypoints boolean
|
|
30
|
+
inspect.graph.leaves boolean
|
|
31
|
+
inspect.graph.edges boolean
|
|
32
|
+
inspect.graph.symbols boolean
|
|
33
|
+
inspect.graph.symbolUsage boolean
|
|
34
|
+
|
|
35
|
+
Use prefs to reduce repeated request fields and avoid unnecessary output.
|
|
36
|
+
|
|
37
|
+
If graph output is too noisy:
|
|
38
|
+
session prefs set inspect.graph.hubs false inspect.graph.leaves false
|
|
39
|
+
|
|
40
|
+
Change prefs while working. Turn details back on when you need them.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Quick Read
|
|
2
|
+
|
|
3
|
+
Use qr to read arbitrary text files with compact, cross-platform line windows.
|
|
4
|
+
qr supports AIB path aliases.
|
|
5
|
+
|
|
6
|
+
qr is not a replacement for inspect.
|
|
7
|
+
Use it as a token-efficient way to read text data when semantic inspect is not needed.
|
|
8
|
+
|
|
9
|
+
Controls:
|
|
10
|
+
-h N head; first N lines
|
|
11
|
+
-t N tail; last N lines
|
|
12
|
+
-o N offset; starting line, 1-based
|
|
13
|
+
-l N limit; line count for offset reads
|
|
14
|
+
-a all; whole file
|
|
15
|
+
|
|
16
|
+
If no window is provided, qr uses -h 80.
|
|
17
|
+
If -a is present, it wins over other window flags.
|
|
18
|
+
|
|
19
|
+
Run:
|
|
20
|
+
aib qr --stdin
|
|
21
|
+
|
|
22
|
+
Input:
|
|
23
|
+
qr @scripts/a.txt h=80
|
|
24
|
+
qr @scripts/b.py o=300 l=50
|
|
25
|
+
qr @scripts/c.md t=120
|
|
26
|
+
qr @logs/app.log all
|
|
27
|
+
|
|
28
|
+
Inline:
|
|
29
|
+
aib qr @scripts/a.txt -h 80
|
|
30
|
+
aib qr @scripts/b.py -o 300 -l 50
|
|
31
|
+
aib qr @logs/app.log -a
|
|
32
|
+
|
|
33
|
+
Use stdin for several reads.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Refactor Batch
|
|
2
|
+
|
|
3
|
+
Modes: preview/apply or execute.
|
|
4
|
+
Use execute for routine changes.
|
|
5
|
+
Use preview/apply when learning a mutation command or inspecting a large multi-step request before writing files.
|
|
6
|
+
|
|
7
|
+
If a name is ambiguous, use selectors.
|
|
8
|
+
Run help selectors to refresh selector syntax.
|
|
9
|
+
|
|
10
|
+
refactor batch runs related mutation requests together.
|
|
11
|
+
Use it when one workflow needs ordered steps, such as rename plus move.
|
|
12
|
+
|
|
13
|
+
Use modulePlan when the main intent is only to split one large file into target modules.
|
|
14
|
+
Use refactor batch when the split also includes coordinated renames or mixed mutation steps.
|
|
15
|
+
|
|
16
|
+
refactor batch preview --stdin
|
|
17
|
+
refactor batch execute --stdin
|
|
18
|
+
refactor batch apply --stdin
|
|
19
|
+
|
|
20
|
+
Use preview/apply when you want to inspect a large mixed plan before writing files.
|
|
21
|
+
Use execute when you want to write immediately.
|
|
22
|
+
Use --from with captured input handles when rerunning edited large batches.
|
|
23
|
+
|
|
24
|
+
Example: rename and move in one request
|
|
25
|
+
|
|
26
|
+
Run:
|
|
27
|
+
aib refactor batch execute --stdin
|
|
28
|
+
|
|
29
|
+
Input:
|
|
30
|
+
{
|
|
31
|
+
"sourceFile": "src/service.ts",
|
|
32
|
+
"requests": [
|
|
33
|
+
{
|
|
34
|
+
"op": "rename",
|
|
35
|
+
"renames": {
|
|
36
|
+
"oldHelper": "newHelper",
|
|
37
|
+
"oldType": "newType"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"op": "move",
|
|
42
|
+
"targetFile": "src/service.helpers.ts",
|
|
43
|
+
"entities": ["newHelper"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"op": "move",
|
|
47
|
+
"targetFile": "src/service.types.ts",
|
|
48
|
+
"entities": ["newType"]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Use top-level sourceFile when requests operate on the same file.
|
|
54
|
+
Override file/sourceFile inside a request when one request targets another file.
|
|
55
|
+
|
|
56
|
+
Supported request kinds:
|
|
57
|
+
rename
|
|
58
|
+
move
|
|
59
|
+
|
|
60
|
+
Use separate command help when the workflow only needs one mutation kind.
|
|
61
|
+
|
|
62
|
+
If a large or partial refactor batch fails, edit the captured input file and rerun with --from.
|
|
63
|
+
For small one-off refactor requests, write a corrected request instead.
|
|
64
|
+
|
|
65
|
+
Latest refactor input:
|
|
66
|
+
<session-dir>/inputs/refactor/_last.json
|
|
67
|
+
|
|
68
|
+
Handle:
|
|
69
|
+
aib:input:refactor:last
|
|
70
|
+
|
|
71
|
+
Example:
|
|
72
|
+
refactor batch execute --from aib:input:refactor:last
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Rename
|
|
2
|
+
|
|
3
|
+
Modes: preview/apply or execute.
|
|
4
|
+
Use execute for routine changes.
|
|
5
|
+
Use preview/apply when learning a mutation command or inspecting a large multi-step request before writing files.
|
|
6
|
+
|
|
7
|
+
If a name is ambiguous, use selectors.
|
|
8
|
+
Run help selectors to refresh selector syntax.
|
|
9
|
+
|
|
10
|
+
Rename is for semantic symbol renames.
|
|
11
|
+
It follows TypeScript references.
|
|
12
|
+
It is not plain-text replacement.
|
|
13
|
+
|
|
14
|
+
Single rename:
|
|
15
|
+
rename preview <file> <entity> <newName>
|
|
16
|
+
rename execute <file> <entity> <newName>
|
|
17
|
+
rename apply <previewId>
|
|
18
|
+
|
|
19
|
+
Use preview/apply when you want to inspect the planned change before writing files.
|
|
20
|
+
Use execute when you want to write immediately.
|
|
21
|
+
|
|
22
|
+
Run:
|
|
23
|
+
aib rename execute --stdin
|
|
24
|
+
|
|
25
|
+
Input:
|
|
26
|
+
{
|
|
27
|
+
"file": "src/service.ts",
|
|
28
|
+
"renames": {
|
|
29
|
+
"oldName": "newName",
|
|
30
|
+
"OldService": "NewService"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Rename can use plain names or selectors.
|
|
35
|
+
For methods and properties, prefer JSON so you can pass parent when needed.
|
|
36
|
+
|
|
37
|
+
If a large rename request fails, edit the captured input file and rerun with --from.
|
|
38
|
+
For small one-off rename requests, write a corrected request instead.
|
|
39
|
+
|
|
40
|
+
Latest rename input:
|
|
41
|
+
<session-dir>/inputs/rename/_last.json
|
|
42
|
+
|
|
43
|
+
Handle:
|
|
44
|
+
aib:input:rename:last
|
|
45
|
+
|
|
46
|
+
Example:
|
|
47
|
+
rename preview --from aib:input:rename:last
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Selectors
|
|
2
|
+
|
|
3
|
+
Selectors identify symbols when names are ambiguous.
|
|
4
|
+
Use plain names when they are unambiguous.
|
|
5
|
+
Use selectors when aib reports ambiguity or when different symbol kinds share a name.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
type WsOptions
|
|
9
|
+
class WsOptions
|
|
10
|
+
|
|
11
|
+
If aib needs the exact entity, use:
|
|
12
|
+
t-WsOptions
|
|
13
|
+
c-WsOptions
|
|
14
|
+
|
|
15
|
+
Selectors list:
|
|
16
|
+
f-name function
|
|
17
|
+
c-Name class
|
|
18
|
+
i-Name interface
|
|
19
|
+
t-Name type
|
|
20
|
+
v-name variable
|
|
21
|
+
e-Name enum
|
|
22
|
+
m-name method, usually with parent in JSON
|
|
23
|
+
p-name property, usually with parent in JSON
|