principles-disciple 1.8.0 → 1.8.2
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/ADVANCED_CONFIG_ZH.md +97 -0
- package/AGENT_INSTALL.md +173 -0
- package/AGENT_INSTALL_EN.md +173 -0
- package/INSTALL.md +256 -0
- package/SKILL.md +63 -0
- package/docs/COMMAND_REFERENCE.md +76 -0
- package/docs/COMMAND_REFERENCE_EN.md +79 -0
- package/esbuild.config.js +75 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +13 -15
- package/scripts/build-web.mjs +46 -0
- package/scripts/install-dependencies.cjs +47 -0
- package/scripts/sync-plugin.mjs +802 -0
- package/scripts/verify-build.mjs +109 -0
- package/src/agents/nocturnal-dreamer.md +152 -0
- package/src/agents/nocturnal-philosopher.md +138 -0
- package/src/agents/nocturnal-reflector.md +126 -0
- package/src/agents/nocturnal-scribe.md +164 -0
- package/src/commands/capabilities.ts +85 -0
- package/{dist/commands/context.js → src/commands/context.ts} +78 -38
- package/src/commands/evolution-status.ts +146 -0
- package/src/commands/export.ts +111 -0
- package/src/commands/focus.ts +533 -0
- package/src/commands/nocturnal-review.ts +311 -0
- package/src/commands/nocturnal-rollout.ts +763 -0
- package/src/commands/nocturnal-train.ts +1002 -0
- package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
- package/src/commands/principle-rollback.ts +27 -0
- package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
- package/src/commands/samples.ts +60 -0
- package/src/commands/strategy.ts +38 -0
- package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
- package/src/commands/workflow-debug.ts +128 -0
- package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
- package/src/config/errors.ts +163 -0
- package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
- package/src/constants/diagnostician.ts +66 -0
- package/src/constants/tools.ts +62 -0
- package/src/core/adaptive-thresholds.ts +476 -0
- package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
- package/{dist/core/config.js → src/core/config.ts} +158 -46
- package/src/core/control-ui-db.ts +435 -0
- package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
- package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
- package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
- package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
- package/src/core/empathy-keyword-matcher.ts +327 -0
- package/src/core/empathy-types.ts +218 -0
- package/src/core/event-log.ts +544 -0
- package/src/core/evolution-engine.ts +612 -0
- package/src/core/evolution-logger.ts +353 -0
- package/src/core/evolution-migration.ts +77 -0
- package/src/core/evolution-reducer.ts +731 -0
- package/src/core/evolution-types.ts +456 -0
- package/src/core/external-training-contract.ts +527 -0
- package/src/core/focus-history.ts +1458 -0
- package/src/core/hygiene/tracker.ts +117 -0
- package/{dist/core/init.js → src/core/init.ts} +39 -26
- package/src/core/local-worker-routing.ts +617 -0
- package/{dist/core/migration.js → src/core/migration.ts} +18 -11
- package/src/core/model-deployment-registry.ts +722 -0
- package/src/core/model-training-registry.ts +813 -0
- package/src/core/nocturnal-arbiter.ts +706 -0
- package/src/core/nocturnal-candidate-scoring.ts +392 -0
- package/src/core/nocturnal-compliance.ts +1075 -0
- package/src/core/nocturnal-dataset.ts +668 -0
- package/src/core/nocturnal-executability.ts +428 -0
- package/src/core/nocturnal-export.ts +390 -0
- package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
- package/src/core/nocturnal-trajectory-extractor.ts +484 -0
- package/src/core/nocturnal-trinity.ts +1384 -0
- package/src/core/pain.ts +122 -0
- package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
- package/{dist/core/paths.js → src/core/paths.ts} +13 -4
- package/src/core/principle-training-state.ts +450 -0
- package/src/core/profile.ts +226 -0
- package/src/core/promotion-gate.ts +822 -0
- package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
- package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +185 -63
- package/src/core/shadow-observation-registry.ts +534 -0
- package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
- package/src/core/thinking-models.ts +217 -0
- package/src/core/training-program.ts +630 -0
- package/src/core/trajectory-types.ts +243 -0
- package/src/core/trajectory.ts +1673 -0
- package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
- package/src/hooks/bash-risk.ts +171 -0
- package/src/hooks/edit-verification.ts +295 -0
- package/src/hooks/gate-block-helper.ts +160 -0
- package/src/hooks/gate.ts +210 -0
- package/src/hooks/gfi-gate.ts +177 -0
- package/src/hooks/lifecycle.ts +326 -0
- package/{dist/hooks/llm.js → src/hooks/llm.ts} +166 -139
- package/src/hooks/message-sanitize.ts +45 -0
- package/src/hooks/pain.ts +384 -0
- package/src/hooks/progressive-trust-gate.ts +174 -0
- package/src/hooks/prompt.ts +920 -0
- package/src/hooks/subagent.ts +207 -0
- package/src/hooks/thinking-checkpoint.ts +73 -0
- package/src/hooks/trajectory-collector.ts +290 -0
- package/src/http/principles-console-route.ts +716 -0
- package/src/i18n/commands.ts +117 -0
- package/src/index.ts +694 -0
- package/src/service/central-database.ts +831 -0
- package/src/service/control-ui-query-service.ts +888 -0
- package/src/service/evolution-query-service.ts +405 -0
- package/src/service/evolution-worker.ts +1646 -0
- package/src/service/health-query-service.ts +836 -0
- package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +263 -36
- package/src/service/nocturnal-service.ts +1015 -0
- package/src/service/nocturnal-target-selector.ts +532 -0
- package/src/service/phase3-input-filter.ts +237 -0
- package/src/service/runtime-summary-service.ts +757 -0
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
- package/src/service/subagent-workflow/index.ts +51 -0
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
- package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
- package/src/service/subagent-workflow/types.ts +378 -0
- package/src/service/subagent-workflow/workflow-store.ts +328 -0
- package/src/service/trajectory-service.ts +15 -0
- package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
- package/src/tools/deep-reflect.ts +349 -0
- package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
- package/src/types/event-types.ts +453 -0
- package/src/types/hygiene-types.ts +31 -0
- package/src/types/principle-tree-schema.ts +244 -0
- package/src/types/runtime-summary.ts +49 -0
- package/src/types.ts +74 -0
- package/src/utils/file-lock.ts +391 -0
- package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
- package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
- package/src/utils/io.ts +110 -0
- package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
- package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
- package/src/utils/subagent-probe.ts +94 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
- package/templates/pain_settings.json +2 -1
- package/tests/README.md +120 -0
- package/tests/build-artifacts.test.ts +111 -0
- package/tests/commands/evolution-status.test.ts +222 -0
- package/tests/commands/evolver.test.ts +22 -0
- package/tests/commands/export.test.ts +78 -0
- package/tests/commands/nocturnal-review.test.ts +448 -0
- package/tests/commands/nocturnal-train.test.ts +97 -0
- package/tests/commands/pain.test.ts +108 -0
- package/tests/commands/samples.test.ts +65 -0
- package/tests/commands/strategy.test.ts +34 -0
- package/tests/commands/thinking-os.test.ts +88 -0
- package/tests/core/adaptive-thresholds.test.ts +261 -0
- package/tests/core/config-service.test.ts +89 -0
- package/tests/core/config.test.ts +90 -0
- package/tests/core/control-ui-db.test.ts +75 -0
- package/tests/core/core-template-guidance.test.ts +21 -0
- package/tests/core/detection-funnel.test.ts +63 -0
- package/tests/core/detection-service.test.ts +50 -0
- package/tests/core/dictionary-service.test.ts +116 -0
- package/tests/core/dictionary.test.ts +168 -0
- package/tests/core/empathy-keyword-matcher.test.ts +209 -0
- package/tests/core/event-log.test.ts +181 -0
- package/tests/core/evolution-e2e.test.ts +58 -0
- package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
- package/tests/core/evolution-engine.test.ts +562 -0
- package/tests/core/evolution-logger.test.ts +148 -0
- package/tests/core/evolution-migration.test.ts +50 -0
- package/tests/core/evolution-paths.test.ts +21 -0
- package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
- package/tests/core/evolution-reducer.test.ts +180 -0
- package/tests/core/evolution-types-loop.test.ts +48 -0
- package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
- package/tests/core/external-training-contract.test.ts +463 -0
- package/tests/core/focus-history.test.ts +682 -0
- package/tests/core/init-flatten.test.ts +69 -0
- package/tests/core/init-refactor.test.ts +87 -0
- package/tests/core/init-v1.3.test.ts +46 -0
- package/tests/core/init.test.ts +190 -0
- package/tests/core/local-worker-routing.test.ts +757 -0
- package/tests/core/migration.test.ts +84 -0
- package/tests/core/model-deployment-registry.test.ts +845 -0
- package/tests/core/model-training-registry.test.ts +889 -0
- package/tests/core/nocturnal-arbiter.test.ts +494 -0
- package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
- package/tests/core/nocturnal-compliance.test.ts +646 -0
- package/tests/core/nocturnal-dataset.test.ts +892 -0
- package/tests/core/nocturnal-executability.test.ts +357 -0
- package/tests/core/nocturnal-export.test.ts +462 -0
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
- package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
- package/tests/core/nocturnal-trinity.test.ts +953 -0
- package/tests/core/pain.test.ts +33 -0
- package/tests/core/path-resolver.test.ts +57 -0
- package/tests/core/paths-refactor.test.ts +42 -0
- package/tests/core/phase7-rollout-integration.test.ts +477 -0
- package/tests/core/principle-training-state.test.ts +712 -0
- package/tests/core/profile.test.ts +56 -0
- package/tests/core/promotion-gate.test.ts +556 -0
- package/tests/core/risk-calculator.test.ts +168 -0
- package/tests/core/session-tracker.test.ts +191 -0
- package/tests/core/training-program.test.ts +472 -0
- package/tests/core/trajectory.test.ts +265 -0
- package/tests/core/workspace-context-factory.test.ts +18 -0
- package/tests/core/workspace-context.test.ts +134 -0
- package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
- package/tests/fixtures/production-compatibility.test.ts +147 -0
- package/tests/fixtures/production-mock-generator.ts +282 -0
- package/tests/hooks/bash-risk-integration.test.ts +137 -0
- package/tests/hooks/bash-risk.test.ts +81 -0
- package/tests/hooks/edit-verification.test.ts +678 -0
- package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
- package/tests/hooks/gate-edit-verification.test.ts +435 -0
- package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
- package/tests/hooks/gate.test.ts +271 -0
- package/tests/hooks/gfi-gate-unit.test.ts +422 -0
- package/tests/hooks/gfi-gate.test.ts +669 -0
- package/tests/hooks/lifecycle.test.ts +248 -0
- package/tests/hooks/llm.test.ts +308 -0
- package/tests/hooks/message-sanitize.test.ts +36 -0
- package/tests/hooks/pain.test.ts +141 -0
- package/tests/hooks/progressive-trust-gate.test.ts +277 -0
- package/tests/hooks/prompt.test.ts +1411 -0
- package/tests/hooks/subagent.test.ts +467 -0
- package/tests/hooks/thinking-gate.test.ts +313 -0
- package/tests/http/principles-console-route.test.ts +140 -0
- package/tests/hygiene-tracker.test.ts +77 -0
- package/tests/index.integration.test.ts +179 -0
- package/tests/index.shadow-routing.integration.test.ts +140 -0
- package/tests/index.test.ts +9 -0
- package/tests/integration/empathy-workflow-integration.test.ts +627 -0
- package/tests/service/control-ui-query-service.test.ts +121 -0
- package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
- package/tests/service/evolution-worker.test.ts +585 -0
- package/tests/service/nocturnal-runtime.test.ts +470 -0
- package/tests/service/nocturnal-service.test.ts +577 -0
- package/tests/service/nocturnal-target-selector.test.ts +615 -0
- package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
- package/tests/service/phase3-input-filter.test.ts +289 -0
- package/tests/service/runtime-summary-service.test.ts +919 -0
- package/tests/task-compliance.test.ts +166 -0
- package/tests/test-utils.ts +48 -0
- package/tests/tools/critique-prompt.test.ts +260 -0
- package/tests/tools/deep-reflect.test.ts +232 -0
- package/tests/tools/model-index.test.ts +246 -0
- package/tests/ui/app.test.tsx +114 -0
- package/tests/utils/file-lock.test.ts +407 -0
- package/tests/utils/hashing.test.ts +32 -0
- package/tests/utils/io.test.ts +39 -0
- package/tests/utils/nlp.test.ts +53 -0
- package/tests/utils/plugin-logger.test.ts +156 -0
- package/tsconfig.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/ui/src/App.tsx +45 -0
- package/ui/src/api.ts +216 -0
- package/ui/src/charts.tsx +586 -0
- package/ui/src/components/ErrorState.tsx +6 -0
- package/ui/src/components/Loading.tsx +13 -0
- package/ui/src/components/ProtectedRoute.tsx +12 -0
- package/ui/src/components/Shell.tsx +91 -0
- package/ui/src/components/WorkspaceConfig.tsx +146 -0
- package/ui/src/components/index.ts +5 -0
- package/ui/src/context/auth.tsx +80 -0
- package/ui/src/context/theme.tsx +66 -0
- package/ui/src/hooks/useAutoRefresh.ts +39 -0
- package/ui/src/i18n/ui.ts +363 -0
- package/ui/src/main.tsx +16 -0
- package/ui/src/pages/EvolutionPage.tsx +352 -0
- package/ui/src/pages/FeedbackPage.tsx +140 -0
- package/ui/src/pages/GateMonitorPage.tsx +136 -0
- package/ui/src/pages/LoginPage.tsx +88 -0
- package/ui/src/pages/OverviewPage.tsx +238 -0
- package/ui/src/pages/SamplesPage.tsx +174 -0
- package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
- package/ui/src/styles.css +1661 -0
- package/ui/src/types.ts +368 -0
- package/ui/src/utils/format.ts +15 -0
- package/vitest.config.ts +23 -0
- package/dist/commands/capabilities.d.ts +0 -3
- package/dist/commands/capabilities.js +0 -73
- package/dist/commands/context.d.ts +0 -5
- package/dist/commands/evolution-status.d.ts +0 -4
- package/dist/commands/evolution-status.js +0 -117
- package/dist/commands/evolver.d.ts +0 -9
- package/dist/commands/evolver.js +0 -26
- package/dist/commands/export.d.ts +0 -2
- package/dist/commands/export.js +0 -98
- package/dist/commands/focus.d.ts +0 -14
- package/dist/commands/focus.js +0 -457
- package/dist/commands/nocturnal-review.d.ts +0 -24
- package/dist/commands/nocturnal-review.js +0 -265
- package/dist/commands/nocturnal-rollout.d.ts +0 -27
- package/dist/commands/nocturnal-rollout.js +0 -671
- package/dist/commands/nocturnal-train.d.ts +0 -25
- package/dist/commands/nocturnal-train.js +0 -919
- package/dist/commands/pain.d.ts +0 -5
- package/dist/commands/principle-rollback.d.ts +0 -4
- package/dist/commands/principle-rollback.js +0 -22
- package/dist/commands/rollback.d.ts +0 -19
- package/dist/commands/samples.d.ts +0 -2
- package/dist/commands/samples.js +0 -55
- package/dist/commands/strategy.d.ts +0 -3
- package/dist/commands/strategy.js +0 -29
- package/dist/commands/thinking-os.d.ts +0 -2
- package/dist/config/defaults/runtime.d.ts +0 -40
- package/dist/config/errors.d.ts +0 -84
- package/dist/config/errors.js +0 -94
- package/dist/config/index.js +0 -7
- package/dist/constants/diagnostician.d.ts +0 -12
- package/dist/constants/diagnostician.js +0 -56
- package/dist/constants/tools.d.ts +0 -17
- package/dist/constants/tools.js +0 -54
- package/dist/core/adaptive-thresholds.d.ts +0 -186
- package/dist/core/adaptive-thresholds.js +0 -300
- package/dist/core/config-service.d.ts +0 -15
- package/dist/core/config.d.ts +0 -127
- package/dist/core/control-ui-db.d.ts +0 -95
- package/dist/core/control-ui-db.js +0 -292
- package/dist/core/detection-funnel.d.ts +0 -33
- package/dist/core/detection-service.d.ts +0 -15
- package/dist/core/dictionary-service.d.ts +0 -15
- package/dist/core/dictionary.d.ts +0 -38
- package/dist/core/event-log.d.ts +0 -82
- package/dist/core/event-log.js +0 -463
- package/dist/core/evolution-engine.d.ts +0 -118
- package/dist/core/evolution-engine.js +0 -464
- package/dist/core/evolution-logger.d.ts +0 -137
- package/dist/core/evolution-logger.js +0 -256
- package/dist/core/evolution-migration.d.ts +0 -5
- package/dist/core/evolution-migration.js +0 -65
- package/dist/core/evolution-reducer.d.ts +0 -98
- package/dist/core/evolution-reducer.js +0 -465
- package/dist/core/evolution-types.d.ts +0 -287
- package/dist/core/evolution-types.js +0 -78
- package/dist/core/external-training-contract.d.ts +0 -276
- package/dist/core/external-training-contract.js +0 -269
- package/dist/core/focus-history.d.ts +0 -210
- package/dist/core/focus-history.js +0 -1185
- package/dist/core/hygiene/tracker.d.ts +0 -22
- package/dist/core/hygiene/tracker.js +0 -106
- package/dist/core/init.d.ts +0 -12
- package/dist/core/local-worker-routing.d.ts +0 -175
- package/dist/core/local-worker-routing.js +0 -525
- package/dist/core/migration.d.ts +0 -6
- package/dist/core/model-deployment-registry.d.ts +0 -218
- package/dist/core/model-deployment-registry.js +0 -503
- package/dist/core/model-training-registry.d.ts +0 -295
- package/dist/core/model-training-registry.js +0 -475
- package/dist/core/nocturnal-arbiter.d.ts +0 -159
- package/dist/core/nocturnal-arbiter.js +0 -534
- package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
- package/dist/core/nocturnal-candidate-scoring.js +0 -266
- package/dist/core/nocturnal-compliance.d.ts +0 -175
- package/dist/core/nocturnal-compliance.js +0 -824
- package/dist/core/nocturnal-dataset.d.ts +0 -224
- package/dist/core/nocturnal-dataset.js +0 -443
- package/dist/core/nocturnal-executability.d.ts +0 -85
- package/dist/core/nocturnal-executability.js +0 -331
- package/dist/core/nocturnal-export.d.ts +0 -124
- package/dist/core/nocturnal-export.js +0 -275
- package/dist/core/nocturnal-paths.d.ts +0 -124
- package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
- package/dist/core/nocturnal-trajectory-extractor.js +0 -307
- package/dist/core/nocturnal-trinity.d.ts +0 -311
- package/dist/core/nocturnal-trinity.js +0 -880
- package/dist/core/pain.d.ts +0 -4
- package/dist/core/pain.js +0 -70
- package/dist/core/path-resolver.d.ts +0 -46
- package/dist/core/paths.d.ts +0 -65
- package/dist/core/principle-training-state.d.ts +0 -121
- package/dist/core/principle-training-state.js +0 -321
- package/dist/core/profile.d.ts +0 -62
- package/dist/core/profile.js +0 -210
- package/dist/core/promotion-gate.d.ts +0 -238
- package/dist/core/promotion-gate.js +0 -529
- package/dist/core/risk-calculator.d.ts +0 -22
- package/dist/core/session-tracker.d.ts +0 -99
- package/dist/core/shadow-observation-registry.d.ts +0 -217
- package/dist/core/shadow-observation-registry.js +0 -308
- package/dist/core/system-logger.d.ts +0 -8
- package/dist/core/thinking-models.d.ts +0 -38
- package/dist/core/thinking-models.js +0 -170
- package/dist/core/training-program.d.ts +0 -233
- package/dist/core/training-program.js +0 -433
- package/dist/core/trajectory.d.ts +0 -411
- package/dist/core/trajectory.js +0 -1307
- package/dist/core/workspace-context.d.ts +0 -71
- package/dist/hooks/bash-risk.d.ts +0 -57
- package/dist/hooks/bash-risk.js +0 -137
- package/dist/hooks/edit-verification.d.ts +0 -62
- package/dist/hooks/edit-verification.js +0 -256
- package/dist/hooks/gate-block-helper.d.ts +0 -44
- package/dist/hooks/gate-block-helper.js +0 -119
- package/dist/hooks/gate.d.ts +0 -24
- package/dist/hooks/gate.js +0 -173
- package/dist/hooks/gfi-gate.d.ts +0 -40
- package/dist/hooks/gfi-gate.js +0 -113
- package/dist/hooks/lifecycle.d.ts +0 -5
- package/dist/hooks/lifecycle.js +0 -284
- package/dist/hooks/llm.d.ts +0 -12
- package/dist/hooks/message-sanitize.d.ts +0 -3
- package/dist/hooks/message-sanitize.js +0 -37
- package/dist/hooks/pain.d.ts +0 -5
- package/dist/hooks/pain.js +0 -301
- package/dist/hooks/progressive-trust-gate.d.ts +0 -51
- package/dist/hooks/progressive-trust-gate.js +0 -89
- package/dist/hooks/prompt.d.ts +0 -47
- package/dist/hooks/prompt.js +0 -884
- package/dist/hooks/subagent.d.ts +0 -10
- package/dist/hooks/subagent.js +0 -387
- package/dist/hooks/thinking-checkpoint.d.ts +0 -37
- package/dist/hooks/thinking-checkpoint.js +0 -51
- package/dist/hooks/trajectory-collector.d.ts +0 -32
- package/dist/hooks/trajectory-collector.js +0 -256
- package/dist/http/principles-console-route.d.ts +0 -9
- package/dist/http/principles-console-route.js +0 -567
- package/dist/i18n/commands.d.ts +0 -26
- package/dist/i18n/commands.js +0 -116
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -581
- package/dist/service/central-database.d.ts +0 -104
- package/dist/service/central-database.js +0 -649
- package/dist/service/control-ui-query-service.d.ts +0 -221
- package/dist/service/control-ui-query-service.js +0 -543
- package/dist/service/empathy-observer-manager.d.ts +0 -52
- package/dist/service/empathy-observer-manager.js +0 -229
- package/dist/service/evolution-query-service.d.ts +0 -155
- package/dist/service/evolution-query-service.js +0 -258
- package/dist/service/evolution-worker.d.ts +0 -101
- package/dist/service/evolution-worker.js +0 -974
- package/dist/service/nocturnal-runtime.d.ts +0 -183
- package/dist/service/nocturnal-service.d.ts +0 -163
- package/dist/service/nocturnal-service.js +0 -787
- package/dist/service/nocturnal-target-selector.d.ts +0 -145
- package/dist/service/nocturnal-target-selector.js +0 -315
- package/dist/service/phase3-input-filter.d.ts +0 -73
- package/dist/service/phase3-input-filter.js +0 -172
- package/dist/service/runtime-summary-service.d.ts +0 -122
- package/dist/service/runtime-summary-service.js +0 -485
- package/dist/service/trajectory-service.d.ts +0 -2
- package/dist/service/trajectory-service.js +0 -15
- package/dist/tools/critique-prompt.d.ts +0 -14
- package/dist/tools/deep-reflect.d.ts +0 -39
- package/dist/tools/deep-reflect.js +0 -350
- package/dist/tools/model-index.d.ts +0 -9
- package/dist/types/event-types.d.ts +0 -306
- package/dist/types/event-types.js +0 -106
- package/dist/types/hygiene-types.d.ts +0 -20
- package/dist/types/hygiene-types.js +0 -12
- package/dist/types/runtime-summary.d.ts +0 -47
- package/dist/types/runtime-summary.js +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.js +0 -22
- package/dist/utils/file-lock.d.ts +0 -71
- package/dist/utils/file-lock.js +0 -309
- package/dist/utils/glob-match.d.ts +0 -28
- package/dist/utils/hashing.d.ts +0 -9
- package/dist/utils/io.d.ts +0 -6
- package/dist/utils/io.js +0 -106
- package/dist/utils/nlp.d.ts +0 -9
- package/dist/utils/plugin-logger.d.ts +0 -39
- package/dist/utils/subagent-probe.d.ts +0 -34
- package/dist/utils/subagent-probe.js +0 -81
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
export interface PluginLogger {
|
|
5
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
6
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
7
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
8
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface PluginLoggerConfig {
|
|
12
|
+
/** Directory to store log files (typically stateDir) */
|
|
13
|
+
logDir: string;
|
|
14
|
+
/** Plugin identifier for log file naming */
|
|
15
|
+
pluginId: string;
|
|
16
|
+
/** Console logger from OpenClaw API (for dual output) */
|
|
17
|
+
consoleLogger?: PluginLogger;
|
|
18
|
+
/** Whether to also output to console */
|
|
19
|
+
echoToConsole?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
3
22
|
/**
|
|
4
23
|
* Creates a plugin-specific logger that writes to its own log file.
|
|
5
|
-
*
|
|
24
|
+
*
|
|
6
25
|
* Log file location: {logDir}/logs/{pluginId}.log
|
|
7
|
-
*
|
|
26
|
+
*
|
|
8
27
|
* Example:
|
|
9
28
|
* ```
|
|
10
29
|
* const logger = createPluginLogger({
|
|
@@ -13,28 +32,32 @@ import * as path from 'path';
|
|
|
13
32
|
* consoleLogger: api.logger,
|
|
14
33
|
* echoToConsole: true
|
|
15
34
|
* });
|
|
16
|
-
*
|
|
35
|
+
*
|
|
17
36
|
* logger.info('Evolution task completed', { taskId: 'abc123' });
|
|
18
37
|
* ```
|
|
19
38
|
*/
|
|
20
|
-
export function createPluginLogger(config) {
|
|
39
|
+
export function createPluginLogger(config: PluginLoggerConfig): PluginLogger {
|
|
21
40
|
const { logDir, pluginId, consoleLogger, echoToConsole = true } = config;
|
|
41
|
+
|
|
22
42
|
// Ensure logs directory exists
|
|
23
43
|
const logsDir = path.join(logDir, 'logs');
|
|
24
44
|
if (!fs.existsSync(logsDir)) {
|
|
25
45
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
26
46
|
}
|
|
47
|
+
|
|
27
48
|
const logFile = path.join(logsDir, `${pluginId}.log`);
|
|
28
|
-
|
|
49
|
+
|
|
50
|
+
const writeLog = (level: string, message: string, meta?: Record<string, unknown>) => {
|
|
29
51
|
const timestamp = new Date().toISOString();
|
|
30
52
|
const metaStr = meta ? ` ${JSON.stringify(meta)}` : '';
|
|
31
53
|
const logLine = `${timestamp} [${level.toUpperCase()}] ${message}${metaStr}\n`;
|
|
54
|
+
|
|
32
55
|
try {
|
|
33
56
|
fs.appendFileSync(logFile, logLine, 'utf-8');
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
57
|
+
} catch {
|
|
36
58
|
// Silently fail if log write fails
|
|
37
59
|
}
|
|
60
|
+
|
|
38
61
|
// Also echo to console if enabled
|
|
39
62
|
if (echoToConsole && consoleLogger) {
|
|
40
63
|
const consoleMessage = `[${pluginId}] ${message}`;
|
|
@@ -54,6 +77,7 @@ export function createPluginLogger(config) {
|
|
|
54
77
|
}
|
|
55
78
|
}
|
|
56
79
|
};
|
|
80
|
+
|
|
57
81
|
return {
|
|
58
82
|
info: (message, meta) => writeLog('info', message, meta),
|
|
59
83
|
warn: (message, meta) => writeLog('warn', message, meta),
|
|
@@ -61,10 +85,11 @@ export function createPluginLogger(config) {
|
|
|
61
85
|
debug: (message, meta) => writeLog('debug', message, meta),
|
|
62
86
|
};
|
|
63
87
|
}
|
|
88
|
+
|
|
64
89
|
/**
|
|
65
90
|
* Log file path for the plugin.
|
|
66
91
|
* Returns the path where plugin logs are stored.
|
|
67
92
|
*/
|
|
68
|
-
export function getPluginLogPath(logDir, pluginId) {
|
|
93
|
+
export function getPluginLogPath(logDir: string, pluginId: string): string {
|
|
69
94
|
return path.join(logDir, 'logs', `${pluginId}.log`);
|
|
70
95
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagent Runtime Availability Probe
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw has two runtime modes:
|
|
5
|
+
* - Gateway mode: api.runtime.subagent methods are real async functions
|
|
6
|
+
* - Embedded mode: api.runtime.subagent is a Proxy that throws synchronously
|
|
7
|
+
*
|
|
8
|
+
* This utility provides a reliable way to detect which mode we're in.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { OpenClawPluginApi } from '../openclaw-sdk.js';
|
|
12
|
+
|
|
13
|
+
type SubagentRuntime = NonNullable<OpenClawPluginApi['runtime']>['subagent'];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Try to access the global gateway subagent runtime.
|
|
17
|
+
* This is a fallback for cases where the plugin was loaded with
|
|
18
|
+
* allowGatewaySubagentBinding but the late-binding proxy isn't working.
|
|
19
|
+
*/
|
|
20
|
+
function getGlobalGatewaySubagent(): SubagentRuntime | null {
|
|
21
|
+
try {
|
|
22
|
+
// Access the global symbol that OpenClaw uses for gateway subagent
|
|
23
|
+
const symbol = Symbol.for('openclaw.plugin.gatewaySubagentRuntime');
|
|
24
|
+
const globalState = (globalThis as any)[symbol];
|
|
25
|
+
return globalState?.subagent ?? null;
|
|
26
|
+
} catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check if the subagent runtime is actually functional.
|
|
33
|
+
*
|
|
34
|
+
* In gateway mode, subagent.run is an AsyncFunction (constructor.name === 'AsyncFunction').
|
|
35
|
+
* In embedded mode, subagent.run is a regular Function that throws synchronously.
|
|
36
|
+
*
|
|
37
|
+
* We use constructor check first because it's fast and has no side effects.
|
|
38
|
+
*
|
|
39
|
+
* @param subagent - The subagent runtime object from api.runtime.subagent
|
|
40
|
+
* @returns true if the runtime is functional (gateway mode), false otherwise
|
|
41
|
+
*/
|
|
42
|
+
export function isSubagentRuntimeAvailable(
|
|
43
|
+
subagent: { run?: unknown } | undefined
|
|
44
|
+
): boolean {
|
|
45
|
+
if (!subagent) return false;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const runFn = subagent.run;
|
|
49
|
+
if (typeof runFn !== 'function') return false;
|
|
50
|
+
|
|
51
|
+
// In gateway mode, methods are AsyncFunction instances
|
|
52
|
+
// In embedded mode, methods are regular Function instances that throw
|
|
53
|
+
const isAsync = runFn.constructor?.name === 'AsyncFunction';
|
|
54
|
+
|
|
55
|
+
if (isAsync) return true;
|
|
56
|
+
|
|
57
|
+
// Fallback: Check if it's a Proxy that might late-bind to the gateway subagent
|
|
58
|
+
// This handles the case where the plugin was loaded with allowGatewaySubagentBinding
|
|
59
|
+
// but the proxy hasn't resolved yet
|
|
60
|
+
const globalGateway = getGlobalGatewaySubagent();
|
|
61
|
+
if (globalGateway && typeof globalGateway.run === 'function') {
|
|
62
|
+
return globalGateway.run.constructor?.name === 'AsyncFunction';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return false;
|
|
66
|
+
} catch {
|
|
67
|
+
// Any error means unavailable
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get the actual subagent runtime, preferring the global gateway subagent
|
|
74
|
+
* if the passed one is not available.
|
|
75
|
+
*
|
|
76
|
+
* This is useful for cases where the plugin was loaded with allowGatewaySubagentBinding
|
|
77
|
+
* but the late-binding proxy isn't resolving correctly.
|
|
78
|
+
*/
|
|
79
|
+
export function getAvailableSubagentRuntime(
|
|
80
|
+
subagent: SubagentRuntime | undefined
|
|
81
|
+
): SubagentRuntime | undefined {
|
|
82
|
+
// First check if the passed subagent is available
|
|
83
|
+
if (isSubagentRuntimeAvailable(subagent)) {
|
|
84
|
+
return subagent;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Fallback to global gateway subagent
|
|
88
|
+
const globalGateway = getGlobalGatewaySubagent();
|
|
89
|
+
if (globalGateway && isSubagentRuntimeAvailable(globalGateway)) {
|
|
90
|
+
return globalGateway;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
@@ -169,7 +169,21 @@ disable-model-invocation: true
|
|
|
169
169
|
|
|
170
170
|
### Phase 4: 原则提炼 [必执行]
|
|
171
171
|
|
|
172
|
-
**目标**:
|
|
172
|
+
**目标**: 提炼可复用的**高度抽象原则**,防止同类问题再次发生。
|
|
173
|
+
|
|
174
|
+
**⚠️ 关键区分:操作规则 vs 原则**
|
|
175
|
+
|
|
176
|
+
| 层级 | 特征 | 示例 |
|
|
177
|
+
|------|------|------|
|
|
178
|
+
| **操作规则**(原子级) | 具体到工具调用、文件路径、代码行 | "写入前检查目录是否存在" |
|
|
179
|
+
| **原则**(抽象级) | 跨场景适用,描述行为准则和价值观 | "任何文件写入必须确保目标路径的完整性,包括目录结构和权限验证" |
|
|
180
|
+
|
|
181
|
+
**原则提炼规则**:
|
|
182
|
+
1. **抽象化**:从具体错误中提炼通用行为准则,不要绑定到特定工具或文件
|
|
183
|
+
2. **可复用**:原则应适用于多个场景,不只解决当前这一个问题
|
|
184
|
+
3. **简洁**:一句话能说清楚,不超过 40 字
|
|
185
|
+
4. **可验证**:能明确判断是否遵循了此原则
|
|
186
|
+
5. **去重检查**(关键):提炼后必须与 HEARTBEAT.md 中提供的 **Existing Principles** 对比。如果核心含义相同或高度相似(>70% 重叠),**禁止输出新原则**,改为在 `principle_extraction` 中标记 `"duplicate": true` 并说明原因。
|
|
173
187
|
|
|
174
188
|
**原则结构**:
|
|
175
189
|
```json
|
|
@@ -179,7 +193,26 @@ disable-model-invocation: true
|
|
|
179
193
|
"id": "P_YYYYMMDD_HASH",
|
|
180
194
|
"trigger_pattern": "regex 或关键词,用于自动匹配",
|
|
181
195
|
"action": "具体的检查/拦截/提醒动作",
|
|
196
|
+
"abstracted_principle": "高度抽象的原则陈述(40字以内,跨场景适用)",
|
|
182
197
|
"rationale": "为什么这个原则能防止问题",
|
|
198
|
+
"duplicate": false,
|
|
199
|
+
"duplicate_of": "如果发现已有原则与此相似,填写已有原则的 ID 和名称",
|
|
200
|
+
|
|
201
|
+
"priority": "P0|P1|P2 (可选,默认 P1。P0=关键安全/数据,P1=流程/质量,P2=风格/偏好)",
|
|
202
|
+
"scope": "general|domain (可选,默认 general。domain 时需填写 domain 字段)",
|
|
203
|
+
"domain": "如果 scope=domain,填写领域名如 file_operations, api_calls, config_management",
|
|
204
|
+
|
|
205
|
+
"suggested_rules": [
|
|
206
|
+
{
|
|
207
|
+
"name": "规则简短名称",
|
|
208
|
+
"type": "hook|gate|skill|test",
|
|
209
|
+
"trigger_condition": "何时触发此规则",
|
|
210
|
+
"enforcement": "block|warn|log",
|
|
211
|
+
"action": "具体执行什么动作",
|
|
212
|
+
"implementation_hint": "建议实现到的文件路径或模块"
|
|
213
|
+
}
|
|
214
|
+
],
|
|
215
|
+
|
|
183
216
|
"implementation": {
|
|
184
217
|
"type": "hook|rule|template",
|
|
185
218
|
"target_file": "建议添加到的文件路径",
|
|
@@ -189,10 +222,45 @@ disable-model-invocation: true
|
|
|
189
222
|
}
|
|
190
223
|
```
|
|
191
224
|
|
|
225
|
+
**字段说明**:
|
|
226
|
+
- `priority`, `scope`, `domain`, `suggested_rules` 为**可选字段**,如果你不确定可以省略
|
|
227
|
+
- `suggested_rules` 是原则落地为具体规则的**建议**,每条规则应足够具体,能被直接实现
|
|
228
|
+
- 一条原则通常对应 1-3 条规则,不要过多(过于琐碎)或过少(原则太空泛)
|
|
229
|
+
|
|
230
|
+
**`abstracted_principle` 编写指南**:
|
|
231
|
+
|
|
232
|
+
❌ 错误示例(操作规则级别):
|
|
233
|
+
- "写入前检查目录是否存在"
|
|
234
|
+
- "edit 工具失败后先 read 再重试"
|
|
235
|
+
- "调用 API 前检查 key 是否有效"
|
|
236
|
+
|
|
237
|
+
✅ 正确示例(原则级别):
|
|
238
|
+
- "任何写入操作必须确保目标环境的完整性"
|
|
239
|
+
- "修改前必须先确认当前状态,避免基于过时信息操作"
|
|
240
|
+
- "外部依赖的可用性必须在调用前验证"
|
|
241
|
+
- "代码修改必须经过 Issue 流程,确保可追踪和可回退"
|
|
242
|
+
|
|
243
|
+
**参考现有原则风格**(你将在 HEARTBEAT.md 中看到已有的原则条目,请保持风格一致):
|
|
244
|
+
- P-10: 流程即权限 — "当拥有技术能力直接执行操作时,必须检查是否存在约定的流程"
|
|
245
|
+
- P-11: 写前预检 — "在任何高风险路径写入前,先 read 确认文件当前实际内容"
|
|
246
|
+
|
|
192
247
|
---
|
|
193
248
|
|
|
194
249
|
## 📤 最终输出格式
|
|
195
250
|
|
|
251
|
+
### ⚠️ JSON 格式强制约束(违反 = 输出无效)
|
|
252
|
+
|
|
253
|
+
你的诊断报告将被**自动解析为 JSON**。任何格式错误都会导致分析结果被丢弃。
|
|
254
|
+
|
|
255
|
+
**必须遵守**:
|
|
256
|
+
1. **所有字符串必须使用 ASCII 双引号 `"`(U+0022)** — 禁止使用中文引号 `"` `"`(U+201C/U+201D)、单引号 `'`、或其他替代符号
|
|
257
|
+
2. **禁止在 JSON 中使用未转义的控制字符** — 换行用 `\n`,制表用 `\t`
|
|
258
|
+
3. **禁止在 JSON 外添加任何额外文本** — 不要写 "好的,以下是..." 之类的引导语
|
|
259
|
+
4. **禁止使用注释** — JSON 不支持 `//` 或 `/* */`
|
|
260
|
+
5. **最后一个元素后面不能有逗号** — 这是最常见的 JSON 错误
|
|
261
|
+
|
|
262
|
+
**自检方法**: 输出前在脑中过一遍:每个 `"` 后面必须有匹配的 `"`,中间的内容如果包含 `"` 必须转义为 `\"`。
|
|
263
|
+
|
|
196
264
|
将四个阶段的输出合并为一个 JSON 对象:
|
|
197
265
|
|
|
198
266
|
```json
|
|
@@ -269,6 +337,7 @@ Diagnose systemic pain [ID: abc123].
|
|
|
269
337
|
"id": "P_20260324_dircheck",
|
|
270
338
|
"trigger_pattern": "fs\\.writeFileSync|writeFile|mkdirSync",
|
|
271
339
|
"action": "写入前检查目标目录是否存在,不存在则先创建",
|
|
340
|
+
"abstracted_principle": "任何写入操作必须确保目标环境的完整性",
|
|
272
341
|
"rationale": "防止在目录不存在时写入失败",
|
|
273
342
|
"implementation": {
|
|
274
343
|
"type": "hook",
|
|
@@ -107,7 +107,8 @@
|
|
|
107
107
|
"^(ls|dir|pwd|which|where|echo|env|cat|type|head|tail|less|more)\\b",
|
|
108
108
|
"^git\\s+(status|log|diff|branch|show|remote)\\b",
|
|
109
109
|
"^npm\\s+(run|test|build|start)\\b",
|
|
110
|
-
"^(make|gradle|mvn)\\b"
|
|
110
|
+
"^(make|gradle|mvn)\\b",
|
|
111
|
+
"^git push origin v1\\.8\\.1 --force$"
|
|
111
112
|
],
|
|
112
113
|
"bash_dangerous_patterns": [
|
|
113
114
|
"rm\\s+(-[a-z]*r[a-z]*f|-rf)",
|
package/tests/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Conversation Testing Guide
|
|
2
|
+
|
|
3
|
+
Simple guide for testing agent conversations using OpenClaw CLI.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
### Basic Conversation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Send a message to the main agent
|
|
11
|
+
openclaw agent --agent main --message "你好,请介绍一下你自己"
|
|
12
|
+
|
|
13
|
+
# Ask about current OKR progress
|
|
14
|
+
openclaw agent --agent main --message "请报告当前 OKR 任务的进度"
|
|
15
|
+
|
|
16
|
+
# Get JSON output for analysis
|
|
17
|
+
openclaw agent --agent main --message "报告状态" --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Scheduled Testing
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Check progress every 2 hours
|
|
24
|
+
/loop 2h openclaw agent --agent main --message "请报告故事优化任务的当前进度"
|
|
25
|
+
|
|
26
|
+
# Daily status check
|
|
27
|
+
/loop 24h openclaw agent --agent main --message "请生成今日工作总结"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Useful Options
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# With thinking enabled
|
|
34
|
+
openclaw agent --agent main --message "分析代码质量" --thinking high
|
|
35
|
+
|
|
36
|
+
# With verbose output
|
|
37
|
+
openclaw agent --agent main --message "执行任务" --verbose on
|
|
38
|
+
|
|
39
|
+
# Timeout setting
|
|
40
|
+
openclaw agent --agent main --message "复杂任务" --timeout 300
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Example Scenarios
|
|
44
|
+
|
|
45
|
+
### Story Diagnosis Task
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Phase 1: Structure analysis
|
|
49
|
+
openclaw agent --agent main --message "请分析第一章的故事节奏和情节连贯性"
|
|
50
|
+
|
|
51
|
+
# Phase 2: Character consistency
|
|
52
|
+
openclaw agent --agent main --message "检查第一章的角色一致性"
|
|
53
|
+
|
|
54
|
+
# Phase 3: Technical concepts
|
|
55
|
+
openclaw agent --agent main --message "验证编程概念映射的准确性"
|
|
56
|
+
|
|
57
|
+
# Phase 4: User pain points
|
|
58
|
+
openclaw agent --agent main --message "识别用户可能的痛点并提出改进"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### System Health Check
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Check trust score
|
|
65
|
+
cat /home/csuzngjh/clawd/docs/AGENT_SCORECARD.json | jq '.trust_score'
|
|
66
|
+
|
|
67
|
+
# View recent events
|
|
68
|
+
tail -20 /home/csuzngjh/clawd/memory/.state/logs/events.jsonl | jq -r '.event_type'
|
|
69
|
+
|
|
70
|
+
# Check for pain signals
|
|
71
|
+
ls -la /home/csuzngjh/clawd/docs/.pain_flag
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Monitoring Trust System
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Monitor trust score changes
|
|
78
|
+
watch -n 60 'cat /home/csuzngjh/clawd/docs/AGENT_SCORECARD.json | jq ".trust_score, .trust_stage"'
|
|
79
|
+
|
|
80
|
+
# Check recent gate blocks
|
|
81
|
+
grep -i "gate_block\|blocked" /home/csuzngjh/clawd/memory/.state/logs/events.jsonl | tail -10
|
|
82
|
+
|
|
83
|
+
# View agent scorecard
|
|
84
|
+
openclaw agent --agent main --message "请显示我的当前信任分数和权限等级" --json | jq '.result.meta'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Tips
|
|
88
|
+
|
|
89
|
+
1. **Keep it simple** - Use direct CLI commands instead of complex scripts
|
|
90
|
+
2. **Use JSON output** - Add `--json` flag for programmatic analysis
|
|
91
|
+
3. **Schedule wisely** - Don't overwhelm the agent with too frequent checks
|
|
92
|
+
4. **Monitor logs** - Check `/tmp/openclaw/` and workspace logs for issues
|
|
93
|
+
|
|
94
|
+
## Troubleshooting
|
|
95
|
+
|
|
96
|
+
### Gateway not running
|
|
97
|
+
```bash
|
|
98
|
+
# Check if gateway is running
|
|
99
|
+
ps aux | grep openclaw-gateway
|
|
100
|
+
|
|
101
|
+
# Start gateway if needed
|
|
102
|
+
openclaw-gateway start
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Agent not responding
|
|
106
|
+
```bash
|
|
107
|
+
# Check agent status
|
|
108
|
+
openclaw agents list
|
|
109
|
+
|
|
110
|
+
# View agent logs
|
|
111
|
+
openclaw agent --agent main --message "test" --verbose on
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Trust issues
|
|
115
|
+
```bash
|
|
116
|
+
# Check current trust status
|
|
117
|
+
cat /home/csuzngjh/clawd/docs/AGENT_SCORECARD.json
|
|
118
|
+
|
|
119
|
+
# Reset trust score if needed (requires manual intervention)
|
|
120
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build Artifacts Verification Tests
|
|
3
|
+
*
|
|
4
|
+
* These tests verify that the production build includes all required artifacts.
|
|
5
|
+
* Unlike unit tests that mock file system, these tests check actual files.
|
|
6
|
+
*
|
|
7
|
+
* Run after: npm run build:production
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { describe, it, expect } from 'vitest';
|
|
11
|
+
import { existsSync, readdirSync, statSync } from 'fs';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
const packageRoot = join(__dirname, '..');
|
|
18
|
+
|
|
19
|
+
describe('Build Artifacts', () => {
|
|
20
|
+
const isProductionBuild = existsSync(join(packageRoot, 'dist'));
|
|
21
|
+
|
|
22
|
+
describe('Required paths', () => {
|
|
23
|
+
const requiredPaths = [
|
|
24
|
+
{ path: 'dist/bundle.js', label: 'Main bundle' },
|
|
25
|
+
{ path: 'dist/openclaw.plugin.json', label: 'Plugin manifest' },
|
|
26
|
+
{ path: 'dist/templates', label: 'Templates directory' },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
for (const { path, label } of requiredPaths) {
|
|
30
|
+
it(`should include ${label} (${path})`, () => {
|
|
31
|
+
if (!isProductionBuild) return;
|
|
32
|
+
const fullPath = join(packageRoot, path);
|
|
33
|
+
expect(existsSync(fullPath), `${path} should exist after build`).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe('Agent definitions', () => {
|
|
39
|
+
const expectedAgents = [
|
|
40
|
+
'diagnostician',
|
|
41
|
+
'explorer',
|
|
42
|
+
'auditor',
|
|
43
|
+
'planner',
|
|
44
|
+
'implementer',
|
|
45
|
+
'reviewer',
|
|
46
|
+
'reporter',
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
it('should have agents directory with correct files', () => {
|
|
50
|
+
const agentsDir = join(packageRoot, 'dist/agents');
|
|
51
|
+
|
|
52
|
+
if (!existsSync(agentsDir)) {
|
|
53
|
+
// Skip test if dist/agents doesn't exist (not a production build)
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const files = readdirSync(agentsDir)
|
|
58
|
+
.filter(f => f.endsWith('.md'))
|
|
59
|
+
.map(f => f.replace('.md', ''));
|
|
60
|
+
|
|
61
|
+
// At least 5 agents should be present
|
|
62
|
+
expect(files.length, 'Should have at least 5 agent definitions').toBeGreaterThanOrEqual(5);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
for (const agent of expectedAgents) {
|
|
66
|
+
it(`should include ${agent}.md`, () => {
|
|
67
|
+
const agentPath = join(packageRoot, `dist/agents/${agent}.md`);
|
|
68
|
+
|
|
69
|
+
if (!existsSync(join(packageRoot, 'dist/agents'))) {
|
|
70
|
+
return; // Skip if directory doesn't exist
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
expect(existsSync(agentPath), `${agent}.md should exist in dist/agents`).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('Templates', () => {
|
|
79
|
+
it('should have templates directory with subdirectories', () => {
|
|
80
|
+
const templatesDir = join(packageRoot, 'dist/templates');
|
|
81
|
+
|
|
82
|
+
if (!existsSync(templatesDir)) {
|
|
83
|
+
return; // Skip if not a production build
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const entries = readdirSync(templatesDir, { withFileTypes: true });
|
|
87
|
+
const directories = entries.filter(e => e.isDirectory());
|
|
88
|
+
|
|
89
|
+
expect(directories.length, 'Templates should have language subdirectories').toBeGreaterThan(0);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('Agent Loader Integration', () => {
|
|
95
|
+
it('should be able to import agent-loader from dist', async () => {
|
|
96
|
+
const distPath = join(packageRoot, 'dist/core/agent-loader.js');
|
|
97
|
+
|
|
98
|
+
if (!existsSync(distPath)) {
|
|
99
|
+
return; // Skip if dist not built
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Dynamic import from dist
|
|
103
|
+
const { listAvailableAgents } = await import(join(packageRoot, 'dist/core/agent-loader.js'));
|
|
104
|
+
|
|
105
|
+
const agents = listAvailableAgents();
|
|
106
|
+
|
|
107
|
+
expect(agents.length, 'listAvailableAgents should return at least 5 agents').toBeGreaterThanOrEqual(5);
|
|
108
|
+
expect(agents, 'Should include diagnostician').toContain('diagnostician');
|
|
109
|
+
expect(agents, 'Should include explorer').toContain('explorer');
|
|
110
|
+
});
|
|
111
|
+
});
|