@whyshu/argent-engine 0.0.0-stage → 0.6.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/MANIFEST.json +341 -0
- package/engine/VERSION +1 -0
- package/engine/agents/catalog.json +454 -0
- package/engine/configs/_aliases.proposed.json +651 -0
- package/engine/configs/_migration-plan.proposed.json +899 -0
- package/engine/configs/account.json +272 -0
- package/engine/configs/advanced.json +205 -0
- package/engine/configs/host.json +149 -0
- package/engine/configs/hr.json +27 -0
- package/engine/configs/notify.json +264 -0
- package/engine/core/cli/argent.mjs +277 -0
- package/engine/core/contracts/argent.contracts.json +1065 -0
- package/engine/core/contracts/verbs.schema.json +2539 -0
- package/engine/core/lib/argent-datadir.mjs +223 -0
- package/engine/core/lib/audit.mjs +187 -0
- package/engine/core/lib/claim.mjs +258 -0
- package/engine/core/lib/config-catalog.mjs +1172 -0
- package/engine/core/lib/doctor-customer.mjs +577 -0
- package/engine/core/lib/flow-list.mjs +138 -0
- package/engine/core/lib/flow-registry.mjs +48 -0
- package/engine/core/lib/init.mjs +247 -0
- package/engine/core/lib/ledger.mjs +124 -0
- package/engine/core/lib/license-activate.mjs +813 -0
- package/engine/core/lib/license-device.mjs +314 -0
- package/engine/core/lib/license-file.mjs +349 -0
- package/engine/core/lib/license-guard.mjs +123 -0
- package/engine/core/lib/license-ops.mjs +1645 -0
- package/engine/core/lib/license-verdict.mjs +133 -0
- package/engine/core/lib/license.mjs +577 -0
- package/engine/core/lib/notify/dedup.mjs +101 -0
- package/engine/core/lib/notify/feishu.mjs +38 -0
- package/engine/core/lib/notify/index.mjs +95 -0
- package/engine/core/lib/notify/verb.mjs +327 -0
- package/engine/core/lib/notify/webhook.mjs +135 -0
- package/engine/core/lib/notify/wecom.mjs +36 -0
- package/engine/core/lib/python.mjs +145 -0
- package/engine/core/lib/sop.mjs +116 -0
- package/engine/core/lib/versions.mjs +205 -0
- package/engine/core/mcp/client.mjs +67 -0
- package/engine/core/mcp/http.mjs +138 -0
- package/engine/core/mcp/server.mjs +702 -0
- package/engine/scripts/_engine_rules_probe.py +15 -0
- package/engine/scripts/analyze-full-day.py +568 -0
- package/engine/scripts/archive/feishu-bridge.js +246 -0
- package/engine/scripts/argent-agents.mjs +527 -0
- package/engine/scripts/argent-capabilities.mjs +776 -0
- package/engine/scripts/argent-catalog.mjs +186 -0
- package/engine/scripts/argent-datadir.py +62 -0
- package/engine/scripts/argent-doctor.mjs +624 -0
- package/engine/scripts/argent-env-write.mjs +302 -0
- package/engine/scripts/argent-schedule.mjs +620 -0
- package/engine/scripts/argent-setup-check.mjs +369 -0
- package/engine/scripts/argent-upgrade.mjs +1046 -0
- package/engine/scripts/base-bootstrap.sh +576 -0
- package/engine/scripts/billing-mode-daily.sh +13 -0
- package/engine/scripts/build-engine-package.mjs +126 -0
- package/engine/scripts/capability-packs.lock.json +484 -0
- package/engine/scripts/capability_pack.py +1242 -0
- package/engine/scripts/check-1.0-criteria.mjs +355 -0
- package/engine/scripts/check-agent-catalog.mjs +141 -0
- package/engine/scripts/check-billing-mode.sh +378 -0
- package/engine/scripts/check-child-sessions.mjs +83 -0
- package/engine/scripts/check-config-catalog.mjs +677 -0
- package/engine/scripts/check-docs-drift.mjs +522 -0
- package/engine/scripts/check-dsh-web-expose.sh +98 -0
- package/engine/scripts/check-judgment-drift.mjs +403 -0
- package/engine/scripts/check-license.mjs +199 -0
- package/engine/scripts/check-model-auth.py +443 -0
- package/engine/scripts/check-pack-closure.mjs +661 -0
- package/engine/scripts/check-portable-symbols.mjs +116 -0
- package/engine/scripts/check-preset-landing.mjs +124 -0
- package/engine/scripts/check-production-home.mjs +602 -0
- package/engine/scripts/check-role-mapping.mjs +461 -0
- package/engine/scripts/check-sample-redaction.mjs +320 -0
- package/engine/scripts/check-skill-classification.mjs +188 -0
- package/engine/scripts/check-sop-consistency.mjs +431 -0
- package/engine/scripts/check-test-env-safety.mjs +627 -0
- package/engine/scripts/check-version-consistency.mjs +452 -0
- package/engine/scripts/ci-run.sh +558 -0
- package/engine/scripts/collect-evidence.mjs +42 -0
- package/engine/scripts/config-explain.mjs +278 -0
- package/engine/scripts/configure-provider.rb +29 -0
- package/engine/scripts/customer-config-migrate.mjs +179 -0
- package/engine/scripts/customer-preflight.py +892 -0
- package/engine/scripts/customer-readiness.sh +135 -0
- package/engine/scripts/daily-report-inbox.py +242 -0
- package/engine/scripts/daily-report-reconcile.mjs +312 -0
- package/engine/scripts/daily-report.mjs +1310 -0
- package/engine/scripts/daily-report.sh +47 -0
- package/engine/scripts/data/lip-product-dict.json +306 -0
- package/engine/scripts/deliver-customer.mjs +932 -0
- package/engine/scripts/delivery-faces.txt +31 -0
- package/engine/scripts/desktop-trial.sh +146 -0
- package/engine/scripts/dev-window.sh +261 -0
- package/engine/scripts/drill-clean-machine.sh +315 -0
- package/engine/scripts/dsh-api-client.mjs +215 -0
- package/engine/scripts/dsh-backup-scope.sh +83 -0
- package/engine/scripts/dsh-offline-pack.mjs +77 -0
- package/engine/scripts/dsh-overlay-pin.sh +87 -0
- package/engine/scripts/dsh-plane.mjs +153 -0
- package/engine/scripts/dsh-portforward.py +223 -0
- package/engine/scripts/dsh-preflight.mjs +179 -0
- package/engine/scripts/dsh-release-watch-daily.sh +19 -0
- package/engine/scripts/dsh-release-watch.mjs +458 -0
- package/engine/scripts/dsh-remote-check.sh +99 -0
- package/engine/scripts/dsh-restart.sh +179 -0
- package/engine/scripts/dsh-restore.sh +111 -0
- package/engine/scripts/dsh-scope-rewire.mjs +803 -0
- package/engine/scripts/dsh-snapshot.mjs +116 -0
- package/engine/scripts/dsh-upgrade-readiness.mjs +165 -0
- package/engine/scripts/dsh-upgrade.mjs +612 -0
- package/engine/scripts/dsh-url.sh +86 -0
- package/engine/scripts/dsh-web-launch.mjs +155 -0
- package/engine/scripts/ensure-store-windows.py +509 -0
- package/engine/scripts/entitlements.py +458 -0
- package/engine/scripts/env_probe.py +411 -0
- package/engine/scripts/feishu-card.mjs +252 -0
- package/engine/scripts/final-check.mjs +43 -0
- package/engine/scripts/fix-skill-frontmatter.py +209 -0
- package/engine/scripts/flow-auto-retry.py +454 -0
- package/engine/scripts/flow-requirements.json +735 -0
- package/engine/scripts/flow-scaffold.py +275 -0
- package/engine/scripts/flow-timers-plist.sh +87 -0
- package/engine/scripts/flow-timers.sh +184 -0
- package/engine/scripts/flow-trigger-wake.mjs +284 -0
- package/engine/scripts/flow-trigger.sh +571 -0
- package/engine/scripts/flow_billing.py +354 -0
- package/engine/scripts/flow_capability_stats.py +314 -0
- package/engine/scripts/flow_case.py +194 -0
- package/engine/scripts/flow_claim.py +497 -0
- package/engine/scripts/flow_config.py +1025 -0
- package/engine/scripts/flow_failure.py +588 -0
- package/engine/scripts/flow_learn.py +105 -0
- package/engine/scripts/flow_ledger.py +235 -0
- package/engine/scripts/flow_policy.py +238 -0
- package/engine/scripts/flow_preflight.py +339 -0
- package/engine/scripts/flow_registry.py +341 -0
- package/engine/scripts/flow_retry.py +304 -0
- package/engine/scripts/flow_return_to_ops.py +191 -0
- package/engine/scripts/flow_source.py +315 -0
- package/engine/scripts/flow_sources/__init__.py +53 -0
- package/engine/scripts/flow_sources/cases_json.py +106 -0
- package/engine/scripts/flow_sources/common.py +428 -0
- package/engine/scripts/flow_sources/feishu_base.py +273 -0
- package/engine/scripts/flow_stale.py +185 -0
- package/engine/scripts/flow_status_reconcile.py +344 -0
- package/engine/scripts/flow_triage.py +849 -0
- package/engine/scripts/flow_write_verify.py +496 -0
- package/engine/scripts/fulfillment.js +586 -0
- package/engine/scripts/gen-agent-bundles.mjs +276 -0
- package/engine/scripts/gen-preset-rows.mjs +259 -0
- package/engine/scripts/init-ml.sh +2278 -0
- package/engine/scripts/install-internal-role.sh +190 -0
- package/engine/scripts/install-license.mjs +641 -0
- package/engine/scripts/install-one-shot.mjs +665 -0
- package/engine/scripts/integration_contract.py +220 -0
- package/engine/scripts/integrations/wenyao/adapter.py +98 -0
- package/engine/scripts/integrations/xzh/adapter.py +75 -0
- package/engine/scripts/invoice-mapping.example.json +40 -0
- package/engine/scripts/invoice-table.sh +195 -0
- package/engine/scripts/invoice_carrier_notice.py +279 -0
- package/engine/scripts/invoice_fail_closeout.py +297 -0
- package/engine/scripts/invoice_lip_runner.py +1508 -0
- package/engine/scripts/invoice_lip_runner.py.bak-20260922-1710-freready +1090 -0
- package/engine/scripts/invoice_ready_audit.py +191 -0
- package/engine/scripts/invoice_runner.py +675 -0
- package/engine/scripts/invoice_stageb.py +516 -0
- package/engine/scripts/launchd/com.whyshu.argent-bridge.plist.example +42 -0
- package/engine/scripts/launchd/com.whyshu.fulfillment-poll.plist.example +29 -0
- package/engine/scripts/lease.py +377 -0
- package/engine/scripts/lib/agent-install.mjs +649 -0
- package/engine/scripts/lib/argent-datadir.mjs +16 -0
- package/engine/scripts/lib/argent-datadir.sh +18 -0
- package/engine/scripts/lib/argent_datadir.py +285 -0
- package/engine/scripts/lib/argent_filelock.py +507 -0
- package/engine/scripts/lib/bootcheck-wiring.mjs +510 -0
- package/engine/scripts/lib/cdp_ports.py +197 -0
- package/engine/scripts/lib/customer-env.mjs +102 -0
- package/engine/scripts/lib/daily-report-core.mjs +517 -0
- package/engine/scripts/lib/dep-declaration.mjs +81 -0
- package/engine/scripts/lib/deps-migrate.mjs +310 -0
- package/engine/scripts/lib/dsh-host-resolve.mjs +109 -0
- package/engine/scripts/lib/dsh-scope.mjs +500 -0
- package/engine/scripts/lib/dsh-snapshot-path.mjs +35 -0
- package/engine/scripts/lib/dsh-versions.mjs +96 -0
- package/engine/scripts/lib/dsh-web-probe.mjs +214 -0
- package/engine/scripts/lib/is-direct-run.mjs +61 -0
- package/engine/scripts/lib/patch-compose.mjs +241 -0
- package/engine/scripts/lib/patch-target.mjs +35 -0
- package/engine/scripts/lib/plugin-lifecycle.mjs +128 -0
- package/engine/scripts/lib/plugin-packages.mjs +332 -0
- package/engine/scripts/lib/preset-compat.mjs +127 -0
- package/engine/scripts/lib/preset-install.mjs +575 -0
- package/engine/scripts/lib/preset-mechanism.mjs +56 -0
- package/engine/scripts/lib/preset-sync.mjs +59 -0
- package/engine/scripts/lib/profile-retire.mjs +97 -0
- package/engine/scripts/lib/python-runtime.mjs +190 -0
- package/engine/scripts/lib/registry.mjs +72 -0
- package/engine/scripts/lib/repo-root.sh +56 -0
- package/engine/scripts/lib/schedule-mechanism.mjs +659 -0
- package/engine/scripts/lib/schedule-probe.mjs +835 -0
- package/engine/scripts/lib/scope-pointer.mjs +164 -0
- package/engine/scripts/lib/settings-panels.mjs +816 -0
- package/engine/scripts/lib/stdio_utf8.py +86 -0
- package/engine/scripts/lib/wake-auth.mjs +392 -0
- package/engine/scripts/lib/webdriver_ipc.py +264 -0
- package/engine/scripts/lib/zstd-frames.mjs +104 -0
- package/engine/scripts/license-e2e-drill.mjs +426 -0
- package/engine/scripts/license-gate.mjs +245 -0
- package/engine/scripts/lip_backlog.py +171 -0
- package/engine/scripts/lip_table.py +185 -0
- package/engine/scripts/local-usage.mjs +214 -0
- package/engine/scripts/migrate-providers.mjs +127 -0
- package/engine/scripts/migrate-skills.sh +65 -0
- package/engine/scripts/ml-oauth-setup.mjs +550 -0
- package/engine/scripts/ml-store-ids.json +26 -0
- package/engine/scripts/ml_artifact_attribution.py +333 -0
- package/engine/scripts/ml_capacity_probe.py +1158 -0
- package/engine/scripts/ml_hub_status.py +1556 -0
- package/engine/scripts/ml_schema_check.py +115 -0
- package/engine/scripts/ml_store_ids.py +139 -0
- package/engine/scripts/npm-publish-argent.mjs +499 -0
- package/engine/scripts/npm-publish-argent.sh +20 -0
- package/engine/scripts/orchestrator.py +13811 -0
- package/engine/scripts/pack-plugins.mjs +140 -0
- package/engine/scripts/patches/dsh-llm-deepseek--transport-diagnostics.patch +297 -0
- package/engine/scripts/patches/dsh-session--append-message-shape.patch +15 -0
- package/engine/scripts/patches/dsh-session--tool-result-block-017.patch +28 -0
- package/engine/scripts/patches/dsh-session-format-v0-to-v1--permission-preset-origin.patch +11 -0
- package/engine/scripts/patches/dsh-session-format-v3-to-v4--turn-outside-replace.patch +20 -0
- package/engine/scripts/patches/dsh-session-persistence-jsonl--worker-bundled-migrators.patch +39 -0
- package/engine/scripts/patches/dsh-tools--render-return-shape.patch +50 -0
- package/engine/scripts/patches/verify-bundled-migrators.mjs +79 -0
- package/engine/scripts/patches/verify-hardening.mjs +167 -0
- package/engine/scripts/patches/verify-session-migration.mjs +149 -0
- package/engine/scripts/patches/verify-transport-diagnostics.mjs +227 -0
- package/engine/scripts/plan-role-rename.mjs +125 -0
- package/engine/scripts/plugin-bootcheck.mjs +451 -0
- package/engine/scripts/plugin-composition.json +15 -0
- package/engine/scripts/poc-mcp-host.mjs +455 -0
- package/engine/scripts/poll-fulfillment.sh +295 -0
- package/engine/scripts/poll-invoice.sh +76 -0
- package/engine/scripts/profile-doctor.mjs +686 -0
- package/engine/scripts/provider-select.sh +71 -0
- package/engine/scripts/provider-switch.sh +146 -0
- package/engine/scripts/provider-sync-target.check.mjs +64 -0
- package/engine/scripts/python-runtime.sh +78 -0
- package/engine/scripts/query_runner.py +310 -0
- package/engine/scripts/release-argent.sh +574 -0
- package/engine/scripts/repair-unresolved-tools.mjs +178 -0
- package/engine/scripts/retire-inventory.mjs +40 -0
- package/engine/scripts/run-tests.sh +257 -0
- package/engine/scripts/s1-audit.mjs +85 -0
- package/engine/scripts/self-sign-license.mjs +179 -0
- package/engine/scripts/session-health-scan.mjs +63 -0
- package/engine/scripts/session-repair-tool-result-content.mjs +181 -0
- package/engine/scripts/setup.sh +22 -0
- package/engine/scripts/skill-install.mjs +629 -0
- package/engine/scripts/sku_translate.py +148 -0
- package/engine/scripts/sync-plugins.sh +90 -0
- package/engine/scripts/sync-presets.sh +27 -0
- package/engine/scripts/sync-scripts.sh +445 -0
- package/engine/scripts/telemetry.py +873 -0
- package/engine/scripts/ui-copy-count.mjs +220 -0
- package/engine/scripts/usage-anchor.sh +137 -0
- package/engine/scripts/usage_report.py +531 -0
- package/engine/scripts/validate-preset-schema.mjs +208 -0
- package/engine/scripts/vertical-init.mjs +323 -0
- package/engine/scripts/vertical-lint.mjs +482 -0
- package/engine/scripts/wenyao-browser.sh +74 -0
- package/engine/scripts/wenyao-fixture-export.py +116 -0
- package/engine/scripts/wenyao-invoice-writeback.mjs +540 -0
- package/engine/scripts/wenyao-login.sh +35 -0
- package/engine/scripts/wenyao-template-map.json +292 -0
- package/engine/scripts/wenyao_attach.py +131 -0
- package/engine/scripts/wenyao_download_template.py +144 -0
- package/engine/scripts/wenyao_fill_template.py +568 -0
- package/engine/scripts/wenyao_login.py +145 -0
- package/engine/scripts/wenyao_portal.py +633 -0
- package/engine/scripts/wenyao_recon.py +230 -0
- package/engine/scripts/wenyao_run.py +503 -0
- package/engine/scripts/wenyao_shadow_diff.py +160 -0
- package/engine/scripts/wenyao_skill_contract.py +156 -0
- package/engine/scripts/wenyao_template_fetch.py +175 -0
- package/engine/scripts/win/dsh-web-autostart.ps1 +372 -0
- package/engine/scripts/ziniao-auth-probe.sh +268 -0
- package/engine/scripts/ziniao-keepalive.sh +217 -0
- package/engine/scripts/ziniao-post-upgrade-check.sh +121 -0
- package/engine/scripts/ziniao-windows.sh +154 -0
- package/engine/skills/README.md +86 -0
- package/engine/skills/argent-dev/SKILL.md +41 -0
- package/engine/skills/internal.json +37 -0
- package/engine/skills/lktop-pm/SKILL.md +35 -0
- package/engine/skills/lktopapp-dev/SKILL.md +34 -0
- package/engine/skills/ml-config-guide/SKILL.md +50 -0
- package/engine/skills/ml-fulfillment-sop/SKILL.md +178 -0
- package/engine/skills/ml-fulfillment-sop/references/andes-components.md +69 -0
- package/engine/skills/ml-fulfillment-sop/references/cdp-port-mapping.md +35 -0
- package/engine/skills/ml-fulfillment-sop/references/feishu-base-fulfillment-schema.md +136 -0
- package/engine/skills/ml-fulfillment-sop/references/multi-window-concurrency.md +69 -0
- package/engine/skills/ml-fulfillment-sop/references/pitfalls.md +77 -0
- package/engine/skills/ml-fulfillment-sop/references/selectors.md +243 -0
- package/engine/skills/ml-fulfillment-sop/scripts/fulfillment.js +586 -0
- package/engine/skills/ml-fulfillment-sop/scripts/poll-and-execute.sh +271 -0
- package/engine/skills/ml-fulfillment-sop/templates/report.md +55 -0
- package/engine/skills/ml-invoice/SKILL.md +506 -0
- package/engine/skills/ml-invoice/references/pitfalls.md +268 -0
- package/engine/skills/ml-invoice/references/portal-flow.md +360 -0
- package/engine/skills/ml-invoice/references/template-fill-contract.md +133 -0
- package/engine/skills/ml-invoice-xzh/SKILL.md +133 -0
- package/engine/skills/ml-invoice-xzh/references/pitfalls.md +230 -0
- package/engine/skills/ml-store-daily-report/SKILL.md +224 -0
- package/engine/skills/ml-store-daily-report/scripts/README.md +25 -0
- package/engine/skills/ml-store-daily-report/scripts/extract.js +691 -0
- package/engine/skills/ml-store-daily-report/scripts/generate.js +299 -0
- package/engine/skills/pet-dev/SKILL.md +42 -0
- package/engine/skills/whyshu-pm/SKILL.md +35 -0
- package/engine/skills/whyshu-web-dev/SKILL.md +50 -0
- package/engine/version.mjs +1 -0
- package/engine/verticals/README.md +103 -0
- package/engine/verticals/_engine-words.baseline.txt +237 -0
- package/engine/verticals/_engine-words.json +19 -0
- package/engine/verticals/mercadolibre/README.md +43 -0
- package/engine/verticals/mercadolibre/config.json +709 -0
- package/engine/verticals/mercadolibre/flows.json +738 -0
- package/engine/verticals/mercadolibre/manifest.json +538 -0
- package/engine/verticals/mercadolibre/migrate-machine-state.mjs +138 -0
- package/engine/verticals/mercadolibre/preflight.py +143 -0
- package/engine/verticals/mercadolibre/prompts/daily-report.failure.md +69 -0
- package/engine/verticals/mercadolibre/prompts/daily-report.md +47 -0
- package/engine/verticals/mercadolibre/prompts/daily-report.scheduled.md +79 -0
- package/engine/verticals/mercadolibre/prompts/full.failure.md +125 -0
- package/engine/verticals/mercadolibre/prompts/full.md +91 -0
- package/engine/verticals/mercadolibre/prompts/wenyao-invoice.failure.md +88 -0
- package/engine/verticals/mercadolibre/prompts/wenyao-invoice.md +64 -0
- package/engine/verticals/mercadolibre/prompts/xzh-invoice.failure.md +91 -0
- package/engine/verticals/mercadolibre/prompts/xzh-invoice.md +46 -0
- package/package.json +22 -4
- package/requirements.txt +5 -0
- package/README.md +0 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 门禁:检查「移植/启用的函数体内,调用位置的符号是否可解析」(2026-09-15 立)
|
|
4
|
+
*
|
|
5
|
+
* 背景:三次事故同一根因 —— 启用了一段从别处搬来的代码,但它依赖的符号没跟过来:
|
|
6
|
+
* ① `inject` 缺失 → 插件树加载失败;
|
|
7
|
+
* ② 启用 askAgent 时缺 `createUserMessage` / `textOf` → 运行期 ReferenceError
|
|
8
|
+
* (用户侧表现为"处理失败");
|
|
9
|
+
* ③ 我的检查脚本用"字符串出现过"当"代码可用" → 误判。
|
|
10
|
+
* 纪律挡不住这类错,静态检查才行 —— 这就是本脚本。
|
|
11
|
+
*
|
|
12
|
+
* 做法(高信号、低误报):只取**目标函数体内处于调用位置**的标识符(`foo(`,排除 `a.foo(`),
|
|
13
|
+
* 与「文件内声明集合(import/const/let/var/function/class/解构/对象方法/参数/catch)+ JS 内置」比对。
|
|
14
|
+
*
|
|
15
|
+
* 用法:node scripts/check-portable-symbols.mjs [文件…](默认三个 argent 插件)
|
|
16
|
+
* 退出码:0 干净;1 有不可解析符号
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync, existsSync } from 'node:fs'
|
|
19
|
+
import { join } from 'node:path'
|
|
20
|
+
|
|
21
|
+
const REPO = new URL('..', import.meta.url).pathname
|
|
22
|
+
// P3.5(2026-09-17):argent-drive / argent-kanban 已退役 ⇒ 只扫存续插件
|
|
23
|
+
const DEFAULT_FILES = [
|
|
24
|
+
'plugins/argent-gateway/src/index.js',
|
|
25
|
+
'plugins/argent-flow/src/index.js',
|
|
26
|
+
'plugins/argent-core/src/index.js',
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
/** 目标函数:移植/启用的高危函数 */
|
|
30
|
+
const TARGET_FNS = ['askAgent', 'getAgent', 'channelAgent', 'channelAsk', 'textOf']
|
|
31
|
+
|
|
32
|
+
const BUILTINS = new Set(('globalThis Object Array String Number Boolean BigInt Symbol Function Date RegExp ' +
|
|
33
|
+
'Error TypeError RangeError SyntaxError EvalError ReferenceError URIError AggregateError Promise Map Set WeakMap WeakSet ' +
|
|
34
|
+
'JSON Math Reflect Proxy Intl Buffer URL URLSearchParams TextEncoder TextDecoder AbortController AbortSignal ' +
|
|
35
|
+
'structuredClone queueMicrotask fetch Request Response Headers FormData Blob File FileReader atob btoa crypto ' +
|
|
36
|
+
'performance navigator window document localStorage sessionStorage location history alert confirm prompt ' +
|
|
37
|
+
'HTMLElement Element Node NodeList MutationObserver IntersectionObserver requestAnimationFrame cancelAnimationFrame ' +
|
|
38
|
+
'getComputedStyle matchMedia Image Worker WebSocket EventSource XMLHttpRequest MessageChannel BroadcastChannel ' +
|
|
39
|
+
'WebAssembly FinalizationRegistry WeakRef Atomics SharedArrayBuffer ArrayBuffer DataView Uint8Array Int8Array ' +
|
|
40
|
+
'Uint16Array Int16Array Uint32Array Int32Array Float32Array Float64Array BigInt64Array BigUint64Array Uint8ClampedArray ' +
|
|
41
|
+
'setTimeout clearTimeout setInterval clearInterval setImmediate clearImmediate console process require module exports ' +
|
|
42
|
+
'__dirname __filename React ' +
|
|
43
|
+
'await async function return if else for while do switch case default break continue try catch finally throw new ' +
|
|
44
|
+
'typeof instanceof in of void delete yield class extends super this null undefined true false let const var static ' +
|
|
45
|
+
'get set constructor arguments').split(' '))
|
|
46
|
+
|
|
47
|
+
const strip = (src) => src
|
|
48
|
+
.replace(/\/\*[\s\S]*?\*\//g, ' ')
|
|
49
|
+
.replace(/\/\/[^\n]*/g, ' ')
|
|
50
|
+
.replace(/`(?:[^`\\]|\\.)*`/g, '``')
|
|
51
|
+
.replace(/'(?:[^'\\]|\\.)*'/g, "''")
|
|
52
|
+
.replace(/"(?:[^"\\]|\\.)*"/g, '""')
|
|
53
|
+
|
|
54
|
+
function declared(code) {
|
|
55
|
+
const names = new Set()
|
|
56
|
+
const add = (n) => { if (n && !BUILTINS.has(n)) names.add(n) }
|
|
57
|
+
for (const m of code.matchAll(/import\s+([\s\S]*?)\s+from\s+['"]/g)) {
|
|
58
|
+
for (const raw of m[1].replace(/[{}]/g, ',').split(',')) {
|
|
59
|
+
const n = raw.trim().split(/\s+as\s+/).pop().trim()
|
|
60
|
+
if (n && n !== '*') add(n)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
for (const m of code.matchAll(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)/g)) add(m[1])
|
|
64
|
+
for (const m of code.matchAll(/\b(?:const|let|var)\s*\{([^}]{0,300})\}/g))
|
|
65
|
+
for (const t of m[1].split(',')) add(t.trim().split(':').pop().trim().split('=')[0].trim())
|
|
66
|
+
for (const m of code.matchAll(/\b(?:const|let|var)\s*\[([^\]]{0,300})\]/g))
|
|
67
|
+
for (const t of m[1].split(',')) add(t.trim())
|
|
68
|
+
for (const m of code.matchAll(/\b(?:async\s+)?function\s*\*?\s*([A-Za-z_$][\w$]*)/g)) add(m[1])
|
|
69
|
+
for (const m of code.matchAll(/\bclass\s+([A-Za-z_$][\w$]*)/g)) add(m[1])
|
|
70
|
+
for (const m of code.matchAll(/(?:^|[{,\n])\s*(?:async\s+)?([A-Za-z_$][\w$]*)\s*\([^()]{0,200}\)\s*\{/g)) add(m[1])
|
|
71
|
+
for (const m of code.matchAll(/\(([^()]{0,400})\)\s*(?:=>|\{)/g))
|
|
72
|
+
for (const t of m[1].split(',')) add(t.trim().replace(/^\.\.\./, '').split(/[=:]/)[0].trim())
|
|
73
|
+
for (const m of code.matchAll(/(?:^|[{,(\s])([A-Za-z_$][\w$]*)\s*=>/g)) add(m[1])
|
|
74
|
+
for (const m of code.matchAll(/\bcatch\s*\(\s*([A-Za-z_$][\w$]*)/g)) add(m[1])
|
|
75
|
+
return names
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function fnBodies(code, name) {
|
|
79
|
+
const out = []
|
|
80
|
+
const re = new RegExp('(?:async\\s+)?function\\s+' + name + '\\s*\\(', 'g')
|
|
81
|
+
let m
|
|
82
|
+
while ((m = re.exec(code))) {
|
|
83
|
+
const open = code.indexOf('{', m.index + m[0].length - 1)
|
|
84
|
+
if (open < 0) continue
|
|
85
|
+
let depth = 0, end = -1
|
|
86
|
+
for (let i = open; i < code.length; i++) {
|
|
87
|
+
if (code[i] === '{') depth++
|
|
88
|
+
else if (code[i] === '}') { depth--; if (depth === 0) { end = i; break } }
|
|
89
|
+
}
|
|
90
|
+
if (end > 0) out.push(code.slice(open, end + 1))
|
|
91
|
+
}
|
|
92
|
+
return out
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let bad = 0
|
|
96
|
+
const files = process.argv.slice(2).length ? process.argv.slice(2) : DEFAULT_FILES
|
|
97
|
+
for (const rel of files) {
|
|
98
|
+
const p = rel.startsWith('/') ? rel : join(REPO, rel)
|
|
99
|
+
if (!existsSync(p)) { console.log(` · 跳过(不存在): ${rel}`); continue }
|
|
100
|
+
const code = strip(readFileSync(p, 'utf8'))
|
|
101
|
+
const declaredNames = declared(code)
|
|
102
|
+
const problems = []
|
|
103
|
+
for (const fn of TARGET_FNS) {
|
|
104
|
+
for (const body of fnBodies(code, fn)) {
|
|
105
|
+
for (const mm of body.matchAll(/(?<![.\w$])([A-Za-z_$][\w$]*)\s*\(/g)) {
|
|
106
|
+
const n = mm[1]
|
|
107
|
+
if (BUILTINS.has(n) || declaredNames.has(n)) continue
|
|
108
|
+
problems.push(`${fn}() → ${n}`)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const uniq = [...new Set(problems)]
|
|
113
|
+
if (uniq.length) { bad++; console.log(` ❌ ${rel}: ${uniq.length} 个调用位置符号不可解析`); console.log(` ${uniq.slice(0, 20).join(', ')}`) }
|
|
114
|
+
else console.log(` ✅ ${rel} 目标函数内调用符号全部可解析`)
|
|
115
|
+
}
|
|
116
|
+
process.exit(bad ? 1 : 0)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* check-preset-landing.mjs — 「角色落盘集合」**只读**体检(2026-10-12 追修批,winpc 现场取证工具)。
|
|
4
|
+
*
|
|
5
|
+
* 为什么要有它(现场实况):判断"这台机器到底落了哪些角色、为什么"此前只能临时手写脚本读四个
|
|
6
|
+
* 地方(patch 实体 / `presets.json` 行 / `package.json#dsh.bundle.patch` / `presets.selection.json`),
|
|
7
|
+
* 于是"读错一处就得出相反结论"。本 CLI 把这四件套 + **已装集来源** + **两条不变式**收成一条只读命令,
|
|
8
|
+
* 任何一台机器(客户机 / 开发机 / winpc)都能照抄:
|
|
9
|
+
*
|
|
10
|
+
* node scripts/check-preset-landing.mjs # 默认 ~/.dsh / profile=web
|
|
11
|
+
* node scripts/check-preset-landing.mjs --json # 供程序消费
|
|
12
|
+
* node scripts/check-preset-landing.mjs --internal-roles # 本机合法装了内部角色(授权口径)
|
|
13
|
+
*
|
|
14
|
+
* ## 判据(任一红即 exit 1)
|
|
15
|
+
* ① **四者相等**:patch 实体 == `presets.json` 行 == `dsh.bundle.patch` == 痕迹 `kept`
|
|
16
|
+
* (唯一实现在 `scripts/lib/preset-install.mjs#checkPresetSelectionConsistency`);
|
|
17
|
+
* ② **落盘集合不含 `visibility: internal` 的角色**,除非本机授权(`agents.json#internalRoles === true`
|
|
18
|
+
* 或 `--internal-roles`)—— 未授权却落了内部角色 ⇒ 判红(这正是放大缺陷的指纹);
|
|
19
|
+
* ③ **痕迹可信性**:痕迹 `kept` 含内部角色而未授权 ⇒ 痕迹不可信(`resolveInstalledSelection` 会
|
|
20
|
+
* 退回 `agents.json` 角色并集)⇒ 一并报出。
|
|
21
|
+
*
|
|
22
|
+
* ⛔ 只读:不写任何文件、不建目录、不发网。退出码:0 = 全绿;1 = 有红(含"未装过");2 = 用法错。
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
25
|
+
import { homedir } from 'node:os'
|
|
26
|
+
import { join } from 'node:path'
|
|
27
|
+
import { isDirectRun } from './lib/is-direct-run.mjs'
|
|
28
|
+
import {
|
|
29
|
+
bundlePatchEntities, bundleShelfIds, installedRowIds, readPresetSelection,
|
|
30
|
+
checkPresetSelectionConsistency, resolveInstalledSelection, internalIdsAmong,
|
|
31
|
+
resolveBundleDir,
|
|
32
|
+
} from './lib/preset-install.mjs'
|
|
33
|
+
|
|
34
|
+
function help() {
|
|
35
|
+
console.log(`角色落盘集体检(只读)
|
|
36
|
+
用法:
|
|
37
|
+
node check-preset-landing.mjs [--dsh-home <dir>] [--profile <name>] [--internal-roles] [--json]
|
|
38
|
+
环境: DSH_HOME / DSH_PROFILE 可覆盖默认(~/.dsh / web)
|
|
39
|
+
退出码: 0 = 全绿;1 = 判红(四者不相等 / 未授权却落内部角色 / 未装过);2 = 用法错`)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function main(argv) {
|
|
43
|
+
const flag = (name) => argv.includes(name)
|
|
44
|
+
const opt = (name, dflt) => {
|
|
45
|
+
const i = argv.indexOf(name)
|
|
46
|
+
return i >= 0 && argv[i + 1] ? argv[i + 1] : dflt
|
|
47
|
+
}
|
|
48
|
+
if (flag('--help') || flag('-h')) { help(); return 0 }
|
|
49
|
+
|
|
50
|
+
const DSH_HOME = opt('--dsh-home', process.env.DSH_HOME || join(homedir(), '.dsh'))
|
|
51
|
+
const PROFILE = opt('--profile', process.env.DSH_PROFILE || 'web')
|
|
52
|
+
const AS_JSON = flag('--json')
|
|
53
|
+
// ⚠️ W9:bundle 落点是**包名**(`@whyshu/argent-presets`),存量机器上是旧裸名目录 ⇒
|
|
54
|
+
// 走真源 `resolveBundleDir()`(两个名字都找;都没落 ⇒ 回规范名路径供「未找到」文案用)。
|
|
55
|
+
const bundleDir = resolveBundleDir(join(DSH_HOME, 'profiles', PROFILE))
|
|
56
|
+
|
|
57
|
+
if (!existsSync(bundleDir)) {
|
|
58
|
+
const msg = `未找到 profile 角色副本:${bundleDir}`
|
|
59
|
+
if (AS_JSON) console.log(JSON.stringify({ ok: false, dshHome: DSH_HOME, profile: PROFILE, bundleDir, problems: [msg] }, null, 2))
|
|
60
|
+
else console.error(`✗ ${msg}\n ⇒ 这台机器没装过 profile 角色(或 profile 名不是 ${PROFILE};用 --profile 指定)`)
|
|
61
|
+
return 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** `agents.json`(智能体账本):内部角色授权的唯一判据来源。 */
|
|
65
|
+
let ledger = null
|
|
66
|
+
try { ledger = JSON.parse(readFileSync(join(DSH_HOME, 'argent', 'agents.json'), 'utf8')) } catch { ledger = null }
|
|
67
|
+
const allowInternal = flag('--internal-roles') || !!(ledger && ledger.internalRoles === true)
|
|
68
|
+
|
|
69
|
+
const entities = bundlePatchEntities(bundleDir)
|
|
70
|
+
const rows = installedRowIds(bundleDir)
|
|
71
|
+
const shelf = bundleShelfIds(bundleDir)
|
|
72
|
+
const trace = readPresetSelection(bundleDir)
|
|
73
|
+
const kept = trace ? trace.kept.map((x) => String(x)) : []
|
|
74
|
+
const inst = resolveInstalledSelection({ bundleDir, ledger, allowInternal })
|
|
75
|
+
const consistency = checkPresetSelectionConsistency(bundleDir)
|
|
76
|
+
const internalLanded = internalIdsAmong(bundleDir, consistency.shelf.length ? consistency.shelf : entities)
|
|
77
|
+
|
|
78
|
+
const problems = []
|
|
79
|
+
if (!consistency.ok) problems.push(...consistency.problems)
|
|
80
|
+
if (internalLanded.length && !allowInternal) {
|
|
81
|
+
problems.push(`落盘集合含 ${internalLanded.length} 个 visibility=internal 的角色(${internalLanded.join('、')}),`
|
|
82
|
+
+ '而本机未授权内部角色(需 --internal-roles,或 agents.json#internalRoles = true)')
|
|
83
|
+
}
|
|
84
|
+
if (inst.rejected) problems.push(`痕迹不可信:${inst.rejected}`)
|
|
85
|
+
|
|
86
|
+
if (AS_JSON) {
|
|
87
|
+
console.log(JSON.stringify({
|
|
88
|
+
ok: problems.length === 0, dshHome: DSH_HOME, profile: PROFILE, bundleDir,
|
|
89
|
+
landing: {
|
|
90
|
+
patchEntities: entities.length, presetsJsonRows: shelf.length,
|
|
91
|
+
bundlePatchRows: rows.length, traceKept: trace ? kept.length : null,
|
|
92
|
+
},
|
|
93
|
+
kept, excluded: trace ? trace.excluded : null, why: trace ? trace.why : null, at: trace ? trace.at : null,
|
|
94
|
+
internalLanded, allowInternal,
|
|
95
|
+
installedSelection: { source: inst.source, ids: inst.ids, trustedTrace: inst.trustedTrace, rejected: inst.rejected },
|
|
96
|
+
problems,
|
|
97
|
+
}, null, 2))
|
|
98
|
+
return problems.length ? 1 : 0
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
console.log(`角色落盘集体检(只读)— ${bundleDir}`)
|
|
102
|
+
console.log(` patch 实体 ${entities.length} | presets.json 行 ${shelf.length} | dsh.bundle.patch ${rows.length} | 痕迹 kept ${trace ? kept.length : '(缺失)'}`)
|
|
103
|
+
console.log(` 已装集来源:${inst.source === 'trace' ? '选择痕迹(可信)' : inst.source === 'agents' ? 'agents.json 角色并集' : '无(首次安装语义)'}`
|
|
104
|
+
+ ` ⇒ ${inst.ids.length ? inst.ids.join('、') : '(空集)'}`)
|
|
105
|
+
if (trace) {
|
|
106
|
+
console.log(` 痕迹:why = ${trace.why || '(未说明)'}`)
|
|
107
|
+
console.log(` kept = ${kept.join('、') || '(空)'}`)
|
|
108
|
+
console.log(` excluded = ${(trace.excluded || []).join('、') || '(空)'}`)
|
|
109
|
+
}
|
|
110
|
+
console.log(` 内部角色授权:${allowInternal ? '有(--internal-roles 或 agents.json#internalRoles=true)' : '无'}`)
|
|
111
|
+
if (problems.length) {
|
|
112
|
+
console.log(`\n✗ 判红 ${problems.length} 条:`)
|
|
113
|
+
for (const p of problems) console.log(` · ${p}`)
|
|
114
|
+
console.log('\n 处置:重跑一次安装/升级命令(安装器收尾重施时会按正确集合收窄);确需内部角色请给 --internal-roles。'
|
|
115
|
+
+ '⛔ 本命令**不改任何文件**。')
|
|
116
|
+
return 1
|
|
117
|
+
}
|
|
118
|
+
console.log('\n✅ 全绿:四者相等 ∧ 落盘集合不含未授权的内部角色')
|
|
119
|
+
return 0
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ⛔ 只在**被直接执行**时跑主逻辑;判据是 realpath 比对(软链路径下也照样执行)——
|
|
123
|
+
// 唯一实现在 lib/is-direct-run.mjs(先例:2026-10-04 统一 10 个 CLI 的入口守卫)。
|
|
124
|
+
if (isDirectRun(import.meta.url)) process.exit(main(process.argv.slice(2)))
|