pi-apexlang 0.2.2 → 0.4.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 +22 -5
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/UPSTREAM.json +2 -2
- package/docs/assets/overview.en.png +0 -0
- package/docs/assets/overview.en.svg +89 -0
- package/docs/assets/overview.uk.png +0 -0
- package/docs/assets/overview.uk.svg +89 -0
- package/docs/en/README.md +41 -0
- package/docs/en/architecture.md +73 -0
- package/docs/en/getting-started.md +77 -0
- package/docs/en/maintenance.md +83 -0
- package/docs/en/tool-reference.md +85 -0
- package/docs/uk/README.md +41 -0
- package/docs/uk/architecture.md +73 -0
- package/docs/uk/getting-started.md +77 -0
- package/docs/uk/maintenance.md +83 -0
- package/docs/uk/tool-reference.md +85 -0
- package/extensions/apexlang/index.ts +19 -10
- package/extensions/lib/apexlang-cli.d.mts +1 -2
- package/extensions/lib/apexlang-cli.mjs +18 -13
- package/extensions/lib/apexlang-local-validate.mjs +83 -0
- package/extensions/lib/apexlang-local-validator.py +116 -0
- package/extensions/lib/apexlang-runtime-validate.mjs +76 -0
- package/package.json +2 -1
- package/skills/apexlang/APEXlang Skills and Workflows.md +325 -0
- package/skills/apexlang/README.md +6 -6
- package/skills/apexlang/RELEASE-NOTES.md +2 -2
- package/skills/apexlang/SKILL.md +24 -19
- package/skills/apexlang/agents/openai.yaml +4 -3
- package/skills/apexlang/assets/apex-generation/components.registry.json +1001 -16
- package/skills/apexlang/assets/apexlang/domains-catalog.json +6 -1
- package/skills/apexlang/assets/component-attributes.json +1924 -180
- package/skills/apexlang/assets/component-policies.json +19 -10
- package/skills/apexlang/assets/contracts/grammar-semantic-rules.json +134 -0
- package/skills/apexlang/assets/contracts/package-layers.json +56 -0
- package/skills/apexlang/assets/contracts/page-construction-packs.json +154 -0
- package/skills/apexlang/assets/contracts/page-patterns.json +119 -0
- package/skills/apexlang/assets/grammar/apexlang.ebnf +11743 -0
- package/skills/apexlang/assets/indexes/font-apex-icon-index.json +1699 -0
- package/skills/apexlang/assets/routing-catalog-main.json +11 -10
- package/skills/apexlang/assets/routing-load-policy.json +35 -9
- package/skills/apexlang/assets/rules-mapping.json +110 -2
- package/skills/apexlang/assets/rules.catalog.json +1298 -0
- package/skills/apexlang/assets/validator-fix-recipes.json +372 -17
- package/skills/apexlang/assets/workspace-intelligence.json +7 -10
- package/skills/apexlang/manifest.json +268 -12
- package/skills/apexlang/references/domains/README.md +1 -1
- package/skills/apexlang/references/domains/page-components/buttons.md +2 -2
- package/skills/apexlang/references/domains/page-components/page-items.md +3 -3
- package/skills/apexlang/references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md +69 -0
- package/skills/apexlang/references/domains/page-components/regions.md +1 -0
- package/skills/apexlang/references/domains/template-components/comments.md +61 -0
- package/skills/apexlang/references/domains/template-components/registry.md +2 -0
- package/skills/apexlang/references/domains/template-components/templates.md +47 -0
- package/skills/apexlang/references/domains/template-components/timeline.md +51 -0
- package/skills/apexlang/references/ops/one-message-router-contract.md +2 -2
- package/skills/apexlang/references/ops/runtime-gates/01-direct-sqlcl-import.md +1 -1
- package/skills/apexlang/references/ops/runtime-gates/02-direct-sqlcl-validate-gate.md +1 -1
- package/skills/apexlang/references/ops/runtime-gates.md +17 -16
- package/skills/apexlang/references/ops/sqlcl-agents/00-connection-gate.md +7 -7
- package/skills/apexlang/references/ops/sqlcl.md +7 -8
- package/skills/apexlang/references/policies/compiler-prop-map.md +6 -4
- package/skills/apexlang/references/policies/governance/00-governance.md +2 -2
- package/skills/apexlang/references/policies/memory-bank/00-guard/ai.guard.md +126 -922
- package/skills/apexlang/references/policies/memory-bank/20-data/apex.logic.md +3 -3
- package/skills/apexlang/references/policies/memory-bank/20-data/db.connection.md +9 -11
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.cards-page.md +95 -0
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.page.md +2 -2
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.smart-filter-search.md +145 -74
- package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-interactions.md +9 -2
- package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-media.md +6 -5
- package/skills/apexlang/references/policies/memory-bank/systemPatterns.md +9 -1
- package/skills/apexlang/references/workflows/apex-generation/agents/20-agent-draft.md +51 -232
- package/skills/apexlang/references/workflows/apex-generation/agents/30-agent-critique.md +49 -449
- package/skills/apexlang/references/workflows/apex-generation/agents/40-agent-revision.md +38 -238
- package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-test-matrix.md +8 -2
- package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-validation-notes.md +19 -3
- package/skills/apexlang/references/workflows/apex-generation/registry.md +15 -1
- package/skills/apexlang/references/workflows/apex-generation/templates.md +1 -1
- package/skills/apexlang/references/workflows/apex-generation.md +1 -1
- package/skills/apexlang/references/workflows/apexlang/apexlang-execution-model.md +5 -5
- package/skills/apexlang/references/workflows/apexlang/prompt-contracts.md +81 -10
- package/skills/apexlang/references/workflows/apexlang/workflow-create-app-from-fr-and-model.md +18 -7
- package/skills/apexlang/release-notes.json +156 -0
- package/skills/apexlang/runtime/grammar_contract.mjs +1166 -0
- package/skills/apexlang/runtime/internal/python/format_apexlang.py +210 -0
- package/skills/apexlang/runtime/internal/python/validate_apexlang.py +14142 -5843
- package/skills/apexlang/runtime/internal/python/validator_common.py +2 -0
- package/skills/apexlang/runtime/lib/catalogs.mjs +1026 -0
- package/skills/apexlang/runtime/lib/common.mjs +35 -0
- package/skills/apexlang/runtime/runtime.bundle.mjs +457 -57
- package/skills/apexlang/templates/items/combobox/combobox.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/date-picker/date-picker._common.md +1 -1
- package/skills/apexlang/templates/items/date-picker/date-picker.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/file-upload/file-upload._common.md +30 -24
- package/skills/apexlang/templates/items/file-upload/file-upload.compact-template.md +6 -0
- package/skills/apexlang/templates/items/file-upload/file-upload.explicit-defaults.md +23 -8
- package/skills/apexlang/templates/items/file-upload/file-upload.minimal.md +6 -0
- package/skills/apexlang/templates/items/hidden-item/hidden-item._common.md +1 -1
- package/skills/apexlang/templates/items/hidden-item/hidden-item.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/items._common.md +3 -2
- package/skills/apexlang/templates/items/list-manager/list-manager.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/markdown-editor/markdown-editor._common.md +1 -1
- package/skills/apexlang/templates/items/markdown-editor/markdown-editor.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/number-field/number-field._common.md +8 -6
- package/skills/apexlang/templates/items/number-field/number-field.explicit-defaults.md +12 -2
- package/skills/apexlang/templates/items/popup-lov/popup-lov.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor._common.md +1 -1
- package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/select-many/standard.md +1 -1
- package/skills/apexlang/templates/items/shuttle/shuttle.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/switch/switch._common.md +8 -8
- package/skills/apexlang/templates/items/switch/switch.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-area/text-area._common.md +2 -3
- package/skills/apexlang/templates/items/text-area/text-area.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-area/text-area.required-length.md +1 -3
- package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.required-length.md +1 -3
- package/skills/apexlang/templates/items/text-field/text-field._common.md +2 -3
- package/skills/apexlang/templates/items/text-field/text-field.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-field/text-field.required-length.md +1 -3
- package/skills/apexlang/templates/page-examples/faceted-search/faceted-search.example.md +0 -5
- package/skills/apexlang/templates/page-examples/form-page/form-page.example.md +0 -9
- package/skills/apexlang/templates/page-examples/interactive-report-page/interactive-report-page.example.md +2 -2
- package/skills/apexlang/templates/page-examples/login-page/login-page.example.md +0 -8
- package/skills/apexlang/templates/page-examples/task-definition-initiated-tasks-page/task-definition-initiated-tasks-page.example.md +7 -17
- package/skills/apexlang/templates/page-examples/task-definition-my-tasks-page/task-definition-my-tasks-page.example.md +7 -65
- package/skills/apexlang/templates/page-examples/task-definition-task-details/task-definition-task-details.example.md +38 -201
- package/skills/apexlang/templates/region-components/calendar/calendar.custom-styling.md +3 -1
- package/skills/apexlang/templates/region-components/calendar/calendar.faceted-search.md +3 -2
- package/skills/apexlang/templates/region-components/cards/README.md +12 -4
- package/skills/apexlang/templates/region-components/cards/cards._common.md +176 -37
- package/skills/apexlang/templates/region-components/cards/cards._index.md +2 -1
- package/skills/apexlang/templates/region-components/cards/cards.refresh-after-dialog.md +46 -0
- package/skills/apexlang/templates/region-components/cards/cards.refresh-on-change.md +58 -0
- package/skills/apexlang/templates/region-components/cards/cards.rest-source.md +54 -18
- package/skills/apexlang/templates/region-components/cards/cards.standard.md +37 -21
- package/skills/apexlang/templates/region-components/chart/chart._series._common.md +1 -4
- package/skills/apexlang/templates/region-components/chart/chart.pie.md +6 -2
- package/skills/apexlang/templates/region-components/chart/chart.status-meter-gauge.md +1 -1
- package/skills/apexlang/templates/region-components/chart/chart.stock.md +2 -0
- package/skills/apexlang/templates/region-components/chart/features/chart.feature-chart-links.md +9 -7
- package/skills/apexlang/templates/region-components/faceted-search/faceted-search._common.md +1 -14
- package/skills/apexlang/templates/region-components/form/form._items._common.md +1 -5
- package/skills/apexlang/templates/region-components/interactive-report/interactive-report._columns._common.md +2 -6
- package/skills/apexlang/templates/region-components/interactive-report/interactive-report.page-header-actions.md +1 -7
- package/skills/apexlang/templates/region-components/list/README.md +1 -1
- package/skills/apexlang/templates/region-components/list/list._common.md +1 -1
- package/skills/apexlang/templates/region-components/map/map.backgrounds.md +12 -10
- package/skills/apexlang/templates/region-components/map/map.layer.extruded-polygons.md +16 -12
- package/skills/apexlang/templates/region-components/map/map.layer.heat-map.md +10 -7
- package/skills/apexlang/templates/region-components/map/map.layer.lines.md +10 -8
- package/skills/apexlang/templates/region-components/map/map.layer.polygons.md +21 -18
- package/skills/apexlang/templates/region-components/map/map.region.background-custom.md +25 -19
- package/skills/apexlang/templates/region-components/map/map.region.background-shared.md +19 -13
- package/skills/apexlang/templates/region-components/map/map.region.bbox-sql.md +13 -13
- package/skills/apexlang/templates/region-components/map/map.region.bbox-static.md +2 -2
- package/skills/apexlang/templates/region-components/map/map.region.browser-location.md +3 -7
- package/skills/apexlang/templates/region-components/map/map.region.init-position-sql.md +7 -7
- package/skills/apexlang/templates/region-components/region-display-selector/README.md +5 -2
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._common.md +60 -7
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._index.md +4 -1
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.permutations.md +55 -0
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.standard.md +91 -5
- package/skills/apexlang/templates/region-components/smart-filter-search/README.md +6 -2
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._common.md +107 -46
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._index.md +4 -3
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search.standard.md +33 -17
- package/skills/apexlang/templates/shared-components/component-settings/component-settings._common.md +1 -0
- package/skills/apexlang/templates/shared-components/component-settings.example.md +1 -0
- package/skills/apexlang/templates/shared-components/email-templates.example.md +1 -1
- package/skills/apexlang/templates/shared-components/rest-data-sources/example_rest_data_source.example.md +40 -46
- package/skills/apexlang/templates/shared-components/task-definitions/action-task.example.md +2 -30
- package/skills/apexlang/templates/shared-components/task-definitions/approve-request.example.md +3 -31
- package/skills/apexlang/templates/template-components/README.md +27 -15
- package/skills/apexlang/templates/template-components/avatar/README.md +56 -0
- package/skills/apexlang/templates/template-components/avatar/avatar._common.md +149 -0
- package/skills/apexlang/templates/template-components/avatar/avatar._index.md +42 -0
- package/skills/apexlang/templates/template-components/{avatar._template_options.md → avatar/avatar._template_options.md} +1 -1
- package/skills/apexlang/templates/template-components/avatar/avatar.report-icon.md +48 -0
- package/skills/apexlang/templates/template-components/avatar/avatar.report-image-url-column.md +62 -0
- package/skills/apexlang/templates/template-components/avatar/avatar.report-initials.md +54 -0
- package/skills/apexlang/templates/template-components/badge/README.md +38 -0
- package/skills/apexlang/templates/template-components/badge/badge._common.md +183 -0
- package/skills/apexlang/templates/template-components/badge/badge._index.md +20 -0
- package/skills/apexlang/templates/template-components/badge/badge.report-link.md +66 -0
- package/skills/apexlang/templates/template-components/badge/badge.report-minimal.md +76 -0
- package/skills/apexlang/templates/template-components/comments/README.md +20 -0
- package/skills/apexlang/templates/template-components/comments/comments._common.md +43 -0
- package/skills/apexlang/templates/template-components/comments/comments._index.md +25 -0
- package/skills/apexlang/templates/template-components/{comments._template_options.md → comments/comments._template_options.md} +2 -1
- package/skills/apexlang/templates/template-components/comments/comments.apex-task-comments.md +77 -0
- package/skills/apexlang/templates/template-components/comments/comments.partial-column.md +120 -0
- package/skills/apexlang/templates/template-components/comments/comments.permutations.md +425 -0
- package/skills/apexlang/templates/template-components/content-row/README.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._common.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._index.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._template_options.md +1 -1
- package/skills/apexlang/templates/template-components/flexbox-container/README.md +9 -0
- package/skills/apexlang/templates/template-components/flexbox-container/flexbox-container._index.md +13 -0
- package/skills/apexlang/templates/template-components/media-list/README.md +100 -0
- package/skills/apexlang/templates/template-components/media-list/media-list._common.md +174 -0
- package/skills/apexlang/templates/template-components/media-list/media-list._index.md +50 -0
- package/skills/apexlang/templates/template-components/{media-list._template_options.md → media-list/media-list._template_options.md} +8 -2
- package/skills/apexlang/templates/template-components/media-list/media-list.partial.md +50 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-avatar-badge.md +76 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-base.md +71 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-grouped.md +40 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-layouts.md +50 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-link.md +53 -0
- package/skills/apexlang/templates/template-components/metric-card/README.md +19 -4
- package/skills/apexlang/templates/template-components/metric-card/metric-card._common.md +122 -29
- package/skills/apexlang/templates/template-components/metric-card/metric-card._index.md +6 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card._template_options.md +47 -2
- package/skills/apexlang/templates/template-components/metric-card/metric-card.partial-minimal.md +51 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.permutations.md +56 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-avatar-badge.md +98 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-grouping-selection.md +131 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-link.md +66 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-minimal.md +97 -0
- package/skills/apexlang/templates/template-components/template-components.registry.json +90 -1
- package/skills/apexlang/templates/template-components/timeline/README.md +19 -0
- package/skills/apexlang/templates/template-components/timeline/timeline._common.md +43 -0
- package/skills/apexlang/templates/template-components/timeline/timeline._index.md +24 -0
- package/skills/apexlang/templates/template-components/{timeline._template_options.md → timeline/timeline._template_options.md} +2 -1
- package/skills/apexlang/templates/template-components/timeline/timeline.permutations.md +399 -0
- package/skills/apexlang/templates/template-components/timeline/timeline.report-sample-data.md +168 -0
- package/skills/apexlang/templates/workspace-components/credentials/credentials-for-open-ai.example.md +1 -1
- package/skills/apexlang/templates/workspace-components/generative-ai-services/open-ai.example.md +8 -6
- package/skills/apexlang/tools/apexctl.mjs +167 -4
- package/skills/apexlang/tools/compiler-truth-audit.mjs +95 -63
- package/skills/apexlang/tools/query-valid-props-context.mjs +30 -0
- package/skills/apexlang/tools/query-valid-props-normalize.mjs +1 -0
- package/skills/apexlang/tools/query-valid-props-runtime.mjs +13 -8
- package/skills/apexlang/tools/query-valid-props-semantics.mjs +391 -0
- package/skills/apexlang/tools/query-valid-props-template-components.mjs +15 -1
- package/skills/apexlang/tools/query-valid-props.mjs +198 -216
- /package/skills/apexlang/templates/template-components/{badge._template_options.md → badge/badge._template_options.md} +0 -0
- /package/skills/apexlang/templates/template-components/{flexbox-container._template_options.md → flexbox-container/flexbox-container._template_options.md} +0 -0
|
@@ -4,6 +4,7 @@ import { cp, lstat, mkdir, readFile, readdir, realpath, rm, writeFile } from "no
|
|
|
4
4
|
import { dirname, extname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { stripVTControlCharacters } from "node:util";
|
|
7
|
+
import { normalizeApxLineEndings } from "../../skills/apexlang/runtime/lib/common.mjs";
|
|
7
8
|
|
|
8
9
|
const moduleDirectory = dirname(fileURLToPath(import.meta.url));
|
|
9
10
|
|
|
@@ -21,6 +22,8 @@ export const APEXLANG_ACTIONS = Object.freeze([
|
|
|
21
22
|
|
|
22
23
|
const apexctlPath = resolve(APEXLANG_SKILL_ROOT, "tools/apexctl.mjs");
|
|
23
24
|
const queryValidPropsPath = resolve(APEXLANG_SKILL_ROOT, "tools/query-valid-props.mjs");
|
|
25
|
+
const localValidatePath = resolve(moduleDirectory, "apexlang-local-validate.mjs");
|
|
26
|
+
const runtimeValidatePath = resolve(moduleDirectory, "apexlang-runtime-validate.mjs");
|
|
24
27
|
const runtimeRoundtripPath = resolve(moduleDirectory, "apexlang-runtime-roundtrip.mjs");
|
|
25
28
|
const sqlclPtyProxyPath = resolve(moduleDirectory, "apexlang-sqlcl-pty.py");
|
|
26
29
|
const CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/;
|
|
@@ -214,9 +217,9 @@ export function buildApexlangCommand(input) {
|
|
|
214
217
|
}
|
|
215
218
|
|
|
216
219
|
if (action === "local_validate") {
|
|
217
|
-
const args = ["
|
|
220
|
+
const args = ["--app-path", requirePath(input, "app_path", action)];
|
|
218
221
|
addFlag(args, "--fix-vocab", input.fix_vocab);
|
|
219
|
-
return
|
|
222
|
+
return { scriptPath: localValidatePath, args, prelude: [] };
|
|
220
223
|
}
|
|
221
224
|
|
|
222
225
|
if (action === "compiler_truth_audit") {
|
|
@@ -309,7 +312,11 @@ export function buildApexlangCommand(input) {
|
|
|
309
312
|
addOption(args, "--apex-root", optionalPath(input, "apex_root"));
|
|
310
313
|
addOption(args, "--compiler-oracle-home", optionalPath(input, "compiler_oracle_home"));
|
|
311
314
|
addFlag(args, "--supporting-objects", input.supporting_objects);
|
|
312
|
-
return
|
|
315
|
+
return {
|
|
316
|
+
scriptPath: runtimeValidatePath,
|
|
317
|
+
args,
|
|
318
|
+
prelude: [{ scriptPath: apexctlPath, args: probeArgs }]
|
|
319
|
+
};
|
|
313
320
|
}
|
|
314
321
|
|
|
315
322
|
export function buildApexlangImportCommand(input, importOptions = {}) {
|
|
@@ -621,7 +628,7 @@ async function clearStaleRuntimeEvidence(command, outputRoot) {
|
|
|
621
628
|
}
|
|
622
629
|
}
|
|
623
630
|
|
|
624
|
-
export async function prepareRuntimeApp(input, cwd, outputRoot
|
|
631
|
+
export async function prepareRuntimeApp(input, cwd, outputRoot) {
|
|
625
632
|
if (!runtimeActionUsesDeployment(input)) {
|
|
626
633
|
return { appPath: input.app_path ? resolve(cwd, input.app_path) : undefined, staged: false };
|
|
627
634
|
}
|
|
@@ -663,10 +670,6 @@ export async function prepareRuntimeApp(input, cwd, outputRoot, prepareOptions =
|
|
|
663
670
|
);
|
|
664
671
|
}
|
|
665
672
|
|
|
666
|
-
if (topLevelWorkspace && prepareOptions.forceStage !== true) {
|
|
667
|
-
return { appPath, staged: false, workspaceSource: "workspace.name" };
|
|
668
|
-
}
|
|
669
|
-
|
|
670
673
|
const stageKey = createHash("sha256")
|
|
671
674
|
.update(`${appPath}\0${requestedWorkspace.toUpperCase()}`)
|
|
672
675
|
.digest("hex")
|
|
@@ -701,6 +704,10 @@ export async function prepareRuntimeApp(input, cwd, outputRoot, prepareOptions =
|
|
|
701
704
|
`${JSON.stringify(deployment, null, 2)}\n`,
|
|
702
705
|
"utf8"
|
|
703
706
|
);
|
|
707
|
+
// Oracle normalizes source line endings before live validation/import. Apply
|
|
708
|
+
// that same normalization only to the staged copy, before binding its digest,
|
|
709
|
+
// so validation and import approve identical bytes without changing the project.
|
|
710
|
+
await normalizeApxLineEndings(stagedAppPath);
|
|
704
711
|
return {
|
|
705
712
|
appPath: stagedAppPath,
|
|
706
713
|
staged: true,
|
|
@@ -2118,9 +2125,7 @@ async function runCommand(input, command, options, runOptions = {}) {
|
|
|
2118
2125
|
if (input.action === "workspace_probe" || command.prelude.length > 0) {
|
|
2119
2126
|
await assertWorkspaceProbeCannotFollowSymlinks(options.cwd);
|
|
2120
2127
|
}
|
|
2121
|
-
const runtimeApp = await prepareRuntimeApp(input, options.cwd, options.outputRoot
|
|
2122
|
-
forceStage: runOptions.forceRuntimeStage === true
|
|
2123
|
-
});
|
|
2128
|
+
const runtimeApp = await prepareRuntimeApp(input, options.cwd, options.outputRoot);
|
|
2124
2129
|
const preRunAppDigest = runtimeApp.appPath && runtimeActionUsesDeployment(input)
|
|
2125
2130
|
? await computeApexlangAppDigest(runtimeApp.appPath)
|
|
2126
2131
|
: undefined;
|
|
@@ -2189,7 +2194,7 @@ export async function runApexlangImport(input, options, importOptions = {}) {
|
|
|
2189
2194
|
normalizedInput,
|
|
2190
2195
|
buildApexlangImportCommand(normalizedInput, importOptions),
|
|
2191
2196
|
options,
|
|
2192
|
-
{
|
|
2197
|
+
{ expectedAppDigest }
|
|
2193
2198
|
);
|
|
2194
2199
|
if (result.ok || importOptions.targetResolutionMode === "create-new") return result;
|
|
2195
2200
|
return runWarningCompatibleImport(normalizedInput, result, options);
|
|
@@ -2205,6 +2210,6 @@ export function runApexlangCreateNewProof(input, options, proofOptions = {}) {
|
|
|
2205
2210
|
createNewConfirmed: false
|
|
2206
2211
|
}),
|
|
2207
2212
|
options,
|
|
2208
|
-
{
|
|
2213
|
+
{ expectedAppDigest }
|
|
2209
2214
|
);
|
|
2210
2215
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { mkdirSync } from "node:fs";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
const moduleDirectory = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const skillRoot = resolve(moduleDirectory, "../../skills/apexlang");
|
|
10
|
+
const runtimeRoot = resolve(skillRoot, "runtime");
|
|
11
|
+
const pythonRoot = resolve(runtimeRoot, "internal/python");
|
|
12
|
+
const optimizedDslValidator = resolve(moduleDirectory, "apexlang-local-validator.py");
|
|
13
|
+
|
|
14
|
+
function readOption(args, name) {
|
|
15
|
+
const index = args.indexOf(name);
|
|
16
|
+
return index >= 0 && index + 1 < args.length ? String(args[index + 1]).trim() : "";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function main() {
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
const appPath = readOption(args, "--app-path");
|
|
22
|
+
if (!appPath) {
|
|
23
|
+
console.error("Missing required --app-path");
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const outputRoot = String(process.env.APEXLANG_OUTPUT_ROOT ?? "").trim();
|
|
28
|
+
if (!outputRoot) {
|
|
29
|
+
console.error("APEXLANG_OUTPUT_ROOT is required in packaged apexlang runtime");
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const reportDir = resolve(outputRoot, "logs");
|
|
34
|
+
mkdirSync(reportDir, { recursive: true });
|
|
35
|
+
const fixVocab = args.includes("--fix-vocab");
|
|
36
|
+
const commands = [
|
|
37
|
+
[
|
|
38
|
+
resolve(pythonRoot, "validate_apexlang_vocab.py"),
|
|
39
|
+
[
|
|
40
|
+
"--app-path",
|
|
41
|
+
appPath,
|
|
42
|
+
"--report-path",
|
|
43
|
+
join(reportDir, "apexlang-vocab-report.json"),
|
|
44
|
+
fixVocab ? "--rewrite" : "--check-only"
|
|
45
|
+
]
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
optimizedDslValidator,
|
|
49
|
+
["--report-path", join(reportDir, "apexlang-dsl-report.json"), appPath]
|
|
50
|
+
],
|
|
51
|
+
[
|
|
52
|
+
resolve(pythonRoot, "validate_validations.py"),
|
|
53
|
+
["--report-path", join(reportDir, "apexlang-validations-report.json"), appPath]
|
|
54
|
+
]
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
let failures = 0;
|
|
58
|
+
for (const [scriptPath, scriptArgs] of commands) {
|
|
59
|
+
const result = spawnSync("python3", [scriptPath, ...scriptArgs], {
|
|
60
|
+
cwd: process.cwd(),
|
|
61
|
+
encoding: "utf8",
|
|
62
|
+
env: {
|
|
63
|
+
...process.env,
|
|
64
|
+
APEXLANG_EMBEDDED_TOOLS_ROOT: resolve(skillRoot, "tools"),
|
|
65
|
+
APEXLANG_PACKAGE_ROOT: skillRoot,
|
|
66
|
+
APEXLANG_RUNTIME_ROOT: runtimeRoot,
|
|
67
|
+
PYTHONDONTWRITEBYTECODE: "1"
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
if (result.stdout) process.stdout.write(result.stdout);
|
|
71
|
+
if (result.stderr) process.stderr.write(result.stderr);
|
|
72
|
+
if (typeof result.status !== "number" || result.status !== 0) failures += 1;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (failures > 0) {
|
|
76
|
+
console.log("APEXLANG_LOCAL_CHECK_FAILED");
|
|
77
|
+
return 1;
|
|
78
|
+
}
|
|
79
|
+
console.log("APEXLANG_LOCAL_CHECK_OK");
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
process.exitCode = main();
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Run Oracle's DSL validator with per-process parser acceleration.
|
|
3
|
+
|
|
4
|
+
The vendored Oracle skill stays byte-for-byte unchanged. This launcher imports
|
|
5
|
+
its validator, replaces only pure parsing helpers with equivalent cached
|
|
6
|
+
implementations, and then calls the original command-line entry point.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from bisect import bisect_right
|
|
12
|
+
from functools import lru_cache, wraps
|
|
13
|
+
import importlib.util
|
|
14
|
+
import os
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
import sys
|
|
17
|
+
from types import ModuleType
|
|
18
|
+
from typing import Any, Callable
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class _SparseDepthIndex:
|
|
22
|
+
"""Store lexical depth checkpoints only at offsets requested by validators."""
|
|
23
|
+
|
|
24
|
+
__slots__ = ("positions", "states")
|
|
25
|
+
|
|
26
|
+
def __init__(self) -> None:
|
|
27
|
+
self.positions: list[int] = [0]
|
|
28
|
+
self.states: list[tuple[int, int, bool]] = [(0, 0, False)]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
_DEPTH_INDEXES: dict[str, _SparseDepthIndex] = {}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _sparse_nesting_depth(text: str, idx: int) -> tuple[int, int]:
|
|
35
|
+
"""Return Oracle-compatible nesting depth using the closest prior checkpoint."""
|
|
36
|
+
target_idx = min(len(text), idx) if idx >= 0 else max(0, len(text) + idx)
|
|
37
|
+
index = _DEPTH_INDEXES.setdefault(text, _SparseDepthIndex())
|
|
38
|
+
checkpoint_slot = bisect_right(index.positions, target_idx) - 1
|
|
39
|
+
start = index.positions[checkpoint_slot]
|
|
40
|
+
paren_depth, brace_depth, in_string = index.states[checkpoint_slot]
|
|
41
|
+
|
|
42
|
+
for pos in range(start, target_idx):
|
|
43
|
+
ch = text[pos]
|
|
44
|
+
if ch == '"' and (pos == 0 or text[pos - 1] != "\\"):
|
|
45
|
+
in_string = not in_string
|
|
46
|
+
continue
|
|
47
|
+
if in_string:
|
|
48
|
+
continue
|
|
49
|
+
if ch == "(":
|
|
50
|
+
paren_depth += 1
|
|
51
|
+
elif ch == ")":
|
|
52
|
+
paren_depth = max(0, paren_depth - 1)
|
|
53
|
+
elif ch == "{":
|
|
54
|
+
brace_depth += 1
|
|
55
|
+
elif ch == "}":
|
|
56
|
+
brace_depth = max(0, brace_depth - 1)
|
|
57
|
+
|
|
58
|
+
if start != target_idx:
|
|
59
|
+
insert_at = checkpoint_slot + 1
|
|
60
|
+
index.positions.insert(insert_at, target_idx)
|
|
61
|
+
index.states.insert(insert_at, (paren_depth, brace_depth, in_string))
|
|
62
|
+
return paren_depth, brace_depth
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _validator_path() -> Path:
|
|
66
|
+
runtime_override = os.environ.get("APEXLANG_RUNTIME_ROOT", "").strip()
|
|
67
|
+
runtime_root = (
|
|
68
|
+
Path(runtime_override).resolve()
|
|
69
|
+
if runtime_override
|
|
70
|
+
else Path(__file__).resolve().parents[2] / "skills" / "apexlang" / "runtime"
|
|
71
|
+
)
|
|
72
|
+
return runtime_root / "internal" / "python" / "validate_apexlang.py"
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _load_oracle_validator(path: Path) -> ModuleType:
|
|
76
|
+
sys.path.insert(0, str(path.parent))
|
|
77
|
+
spec = importlib.util.spec_from_file_location("_pi_apexlang_oracle_validator", path)
|
|
78
|
+
if spec is None or spec.loader is None:
|
|
79
|
+
raise RuntimeError(f"Cannot load Oracle APEXlang validator: {path}")
|
|
80
|
+
module = importlib.util.module_from_spec(spec)
|
|
81
|
+
sys.modules[spec.name] = module
|
|
82
|
+
spec.loader.exec_module(module)
|
|
83
|
+
return module
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _cache_list_function(function: Callable[..., list[Any]]) -> Callable[..., list[Any]]:
|
|
87
|
+
"""Cache immutable results while preserving Oracle's fresh-list return type."""
|
|
88
|
+
cached = lru_cache(maxsize=None)(lambda *args: tuple(function(*args)))
|
|
89
|
+
|
|
90
|
+
@wraps(function)
|
|
91
|
+
def wrapper(*args: Any) -> list[Any]:
|
|
92
|
+
return list(cached(*args))
|
|
93
|
+
|
|
94
|
+
return wrapper
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _accelerate(module: ModuleType) -> None:
|
|
98
|
+
module.nesting_depth = _sparse_nesting_depth
|
|
99
|
+
for name in (
|
|
100
|
+
"find_component_blocks",
|
|
101
|
+
"find_named_brace_blocks",
|
|
102
|
+
"find_immediate_component_blocks",
|
|
103
|
+
"find_immediate_named_brace_blocks",
|
|
104
|
+
):
|
|
105
|
+
setattr(module, name, _cache_list_function(getattr(module, name)))
|
|
106
|
+
module.block_body = lru_cache(maxsize=None)(module.block_body)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def main(argv: list[str]) -> int:
|
|
110
|
+
validator = _load_oracle_validator(_validator_path())
|
|
111
|
+
_accelerate(validator)
|
|
112
|
+
return int(validator.main(argv))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
if __name__ == "__main__":
|
|
116
|
+
sys.exit(main(sys.argv[1:]))
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { dirname, resolve } from "node:path";
|
|
2
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
+
|
|
4
|
+
const moduleDirectory = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const packageRoot = resolve(moduleDirectory, "../../skills/apexlang");
|
|
6
|
+
const runtimeRoot = resolve(packageRoot, "runtime");
|
|
7
|
+
|
|
8
|
+
export async function loadPackagedRuntimeValidation() {
|
|
9
|
+
process.env.APEXLANG_PACKAGE_ROOT = packageRoot;
|
|
10
|
+
process.env.APEXLANG_RUNTIME_ROOT = runtimeRoot;
|
|
11
|
+
process.env.APEXLANG_EMBEDDED_TOOLS_ROOT = resolve(packageRoot, "tools");
|
|
12
|
+
|
|
13
|
+
const [runtime, grammar, common] = await Promise.all([
|
|
14
|
+
import(pathToFileURL(resolve(runtimeRoot, "runtime.bundle.mjs")).href),
|
|
15
|
+
import(pathToFileURL(resolve(runtimeRoot, "grammar_contract.mjs")).href),
|
|
16
|
+
import(pathToFileURL(resolve(runtimeRoot, "lib/common.mjs")).href)
|
|
17
|
+
]);
|
|
18
|
+
// Oracle's packaged Media List gate still addresses these two helpers using
|
|
19
|
+
// source-tree paths. Redirect only their locations; keep its gate and reports.
|
|
20
|
+
const dependencies = {
|
|
21
|
+
resolveMediaListGrammarContract: (options) => runtime.resolveMediaListGrammarContract({
|
|
22
|
+
...options,
|
|
23
|
+
buildGrammarContractFn: grammar.buildGrammarContract
|
|
24
|
+
}),
|
|
25
|
+
runTargetBuildLocalValidation: ({ appPath, componentContractPath }) => common.runCommand(
|
|
26
|
+
"python3",
|
|
27
|
+
[
|
|
28
|
+
resolve(runtimeRoot, "internal/python/validate_apexlang.py"),
|
|
29
|
+
"--component-attributes",
|
|
30
|
+
componentContractPath,
|
|
31
|
+
appPath
|
|
32
|
+
],
|
|
33
|
+
{ allowFailure: true, passthrough: false, env: { PYTHONDONTWRITEBYTECODE: "1" } }
|
|
34
|
+
)
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
...dependencies,
|
|
38
|
+
run: (options) => runtime.runRuntimeValidate({
|
|
39
|
+
...options,
|
|
40
|
+
_deps: { ...dependencies, ...options._deps }
|
|
41
|
+
})
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function readOption(args, name, fallback = "") {
|
|
46
|
+
const index = args.indexOf(name);
|
|
47
|
+
return index >= 0 && index + 1 < args.length ? args[index + 1] : fallback;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function main(args) {
|
|
51
|
+
if (args[0] !== "runtime" || args[1] !== "validate") {
|
|
52
|
+
throw new Error("The pi APEXlang validation launcher accepts only runtime validate.");
|
|
53
|
+
}
|
|
54
|
+
const validation = await loadPackagedRuntimeValidation();
|
|
55
|
+
const result = await validation.run({
|
|
56
|
+
appPath: readOption(args, "--app-path"),
|
|
57
|
+
dbConnectionName: readOption(args, "--db-connection-name"),
|
|
58
|
+
executionMode: readOption(args, "--execution-mode", "auto"),
|
|
59
|
+
targetResolutionMode: readOption(args, "--target-resolution-mode", "update-existing"),
|
|
60
|
+
workspaceId: readOption(args, "--workspaceid"),
|
|
61
|
+
supportingObjects: args.includes("--supporting-objects"),
|
|
62
|
+
preflightOnly: args.includes("--preflight-only"),
|
|
63
|
+
apexRoot: readOption(args, "--apex-root"),
|
|
64
|
+
compilerOracleHome: readOption(args, "--compiler-oracle-home"),
|
|
65
|
+
artifactDir: readOption(args, "--artifact-dir"),
|
|
66
|
+
vscodeProblemsPath: readOption(args, "--vscode-problems-path"),
|
|
67
|
+
reportPath: readOption(args, "--report-path"),
|
|
68
|
+
transcriptPath: readOption(args, "--transcript-path")
|
|
69
|
+
});
|
|
70
|
+
process.stdout.write(`${JSON.stringify(result.payload, null, 2)}\n`);
|
|
71
|
+
process.exitCode = result.code;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
75
|
+
await main(process.argv.slice(2));
|
|
76
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-apexlang",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "APEXlang support for pi, powered by Oracle's public APEXlang skill.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UPL-1.0",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"agent-skill"
|
|
23
23
|
],
|
|
24
24
|
"files": [
|
|
25
|
+
"docs",
|
|
25
26
|
"extensions",
|
|
26
27
|
"skills",
|
|
27
28
|
"!extensions/**/__pycache__/**",
|