principles-disciple 1.72.0 → 1.74.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/INSTALL.md +1 -3
- package/openclaw.plugin.json +10 -5
- package/package.json +17 -19
- package/scripts/acceptance-test.mjs +16 -73
- package/scripts/sync-plugin.mjs +382 -77
- package/src/commands/archive-impl.ts +2 -1
- package/src/commands/capabilities.ts +2 -2
- package/src/commands/context.ts +2 -2
- package/src/commands/disable-impl.ts +2 -1
- package/src/commands/evolution-status.ts +16 -16
- package/src/commands/export.ts +12 -67
- package/src/commands/pain.ts +91 -1
- package/src/commands/principle-rollback.ts +2 -1
- package/src/commands/promote-impl.ts +7 -43
- package/src/commands/rollback-impl.ts +2 -1
- package/src/commands/rollback.ts +2 -1
- package/src/commands/samples.ts +2 -1
- package/src/commands/thinking-os.ts +2 -1
- package/src/config/errors.ts +18 -2
- package/src/constants/diagnostician.ts +2 -2
- package/src/constants/tools.ts +2 -1
- package/src/core/__tests__/focus-history.test.ts +210 -0
- package/src/core/config.ts +1 -1
- package/src/core/correction-cue-learner.ts +2 -136
- package/src/core/correction-types.ts +16 -88
- package/src/core/dictionary.ts +19 -20
- package/src/core/empathy-keyword-matcher.ts +17 -289
- package/src/core/empathy-types.ts +18 -229
- package/src/core/event-log.ts +29 -132
- package/src/core/evolution-reducer.ts +21 -2
- package/src/core/evolution-types.ts +76 -464
- package/src/core/file-store.ts +80 -0
- package/src/core/focus-history.ts +228 -955
- package/src/core/local-worker-routing.ts +34 -314
- package/src/core/merge-gate-audit.ts +0 -195
- package/src/core/migration.ts +0 -1
- package/src/core/pain-diagnostic-gate.ts +154 -0
- package/src/core/pain-signal.ts +21 -138
- package/src/core/pain.ts +15 -88
- package/src/core/path-resolver.ts +0 -1
- package/src/core/paths.ts +0 -1
- package/src/core/pd-task-reconciler.ts +26 -115
- package/src/core/pd-task-service.ts +9 -9
- package/src/core/pd-task-types.ts +23 -127
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
- package/src/core/principle-compiler/code-validator.ts +15 -42
- package/src/core/principle-compiler/compiler.ts +100 -15
- package/src/core/principle-compiler/index.ts +5 -2
- package/src/core/principle-compiler/template-generator.ts +4 -104
- package/src/core/principle-injection.ts +10 -202
- package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
- package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
- package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
- package/src/core/principle-tree-ledger-adapter.ts +145 -0
- package/src/core/principle-tree-ledger.ts +8 -6
- package/src/core/reflection/reflection-context.ts +14 -109
- package/src/core/replay-engine.ts +8 -500
- package/src/core/rule-host-helpers.ts +5 -35
- package/src/core/rule-host-types.ts +10 -82
- package/src/core/rule-host.ts +6 -63
- package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
- package/src/core/session-tracker.ts +87 -101
- package/src/core/shadow-observation-registry.ts +19 -48
- package/src/core/trajectory.ts +3 -1
- package/src/core/workflow-funnel-loader.ts +62 -68
- package/src/core/workspace-context.ts +46 -0
- package/src/core/workspace-dir-service.ts +1 -1
- package/src/core/workspace-dir-validation.ts +18 -9
- package/src/hooks/AGENTS.md +1 -1
- package/src/hooks/gate-block-helper.ts +71 -64
- package/src/hooks/gate.ts +183 -31
- package/src/hooks/lifecycle.ts +30 -32
- package/src/hooks/llm.ts +60 -32
- package/src/hooks/pain.ts +297 -103
- package/src/hooks/prompt.ts +400 -440
- package/src/hooks/subagent.ts +2 -29
- package/src/i18n/commands.ts +2 -10
- package/src/index.ts +95 -85
- package/src/openclaw-sdk.ts +311 -0
- package/src/service/central-database.ts +8 -4
- package/src/service/evolution-queue-migration.ts +2 -1
- package/src/service/evolution-worker.ts +163 -1786
- package/src/service/internalization-trigger-adapter.ts +302 -0
- package/src/service/keyword-optimization-service.ts +4 -4
- package/src/service/monitoring-query-service.ts +1 -215
- package/src/service/queue-io.ts +60 -331
- package/src/service/runtime-summary-service.ts +59 -16
- package/src/service/subagent-workflow/index.ts +0 -41
- package/src/service/subagent-workflow/types.ts +9 -120
- package/src/service/subagent-workflow/workflow-store.ts +2 -119
- package/src/service/workflow-watchdog.ts +0 -43
- package/src/types/event-payload.ts +16 -74
- package/src/types/event-types.ts +38 -547
- package/src/types/hygiene-types.ts +7 -30
- package/src/types/principle-tree-schema.ts +20 -222
- package/src/types/queue.ts +15 -70
- package/src/types/runtime-summary.ts +5 -49
- package/src/utils/io.ts +8 -20
- package/src/utils/retry.ts +1 -1
- package/src/utils/shadow-fingerprint.ts +2 -2
- package/src/utils/workspace-resolver.ts +50 -0
- package/templates/langs/en/core/AGENTS.md +7 -7
- package/templates/langs/en/core/BOOT.md +1 -1
- package/templates/langs/en/core/HEARTBEAT.md +2 -2
- package/templates/langs/en/principles/THINKING_OS.md +3 -2
- package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/en/skills/evolve-task/SKILL.md +3 -3
- package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-mentor/SKILL.md +2 -3
- package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
- package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
- package/templates/langs/zh/core/AGENTS.md +7 -7
- package/templates/langs/zh/core/BOOT.md +1 -1
- package/templates/langs/zh/core/HEARTBEAT.md +2 -2
- package/templates/langs/zh/principles/THINKING_OS.md +3 -2
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
- package/templates/langs/zh/skills/evolve-task/SKILL.md +4 -4
- package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/zh/skills/pd-mentor/SKILL.md +2 -3
- package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
- package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
- package/tests/build-artifacts.test.ts +1 -3
- package/tests/commands/evolution-status.test.ts +0 -118
- package/tests/core/bootstrap-rules.test.ts +1 -1
- package/tests/core/config.test.ts +1 -1
- package/tests/core/event-log.test.ts +35 -0
- package/tests/core/evolution-engine.test.ts +610 -0
- package/tests/core/file-store.test.ts +102 -0
- package/tests/core/focus-history.test.ts +203 -11
- package/tests/core/merge-gate-audit.test.ts +2 -169
- package/tests/core/migration.test.ts +7 -7
- package/tests/core/model-deployment-registry.test.ts +7 -1
- package/tests/core/model-training-registry.test.ts +19 -0
- package/tests/core/observability.test.ts +0 -1
- package/tests/core/pain-diagnostic-gate.test.ts +498 -0
- package/tests/core/pain.test.ts +0 -1
- package/tests/core/path-resolver.test.ts +1 -1
- package/tests/core/paths-refactor.test.ts +0 -22
- package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
- package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
- package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
- package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
- package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
- package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
- package/tests/core/reflection-context.test.ts +0 -14
- package/tests/core/replay-engine.test.ts +127 -215
- package/tests/core/rule-host-helpers.test.ts +2 -2
- package/tests/core/rule-implementation-runtime.test.ts +0 -27
- package/tests/core/workflow-funnel-loader.test.ts +162 -0
- package/tests/core/workspace-context.test.ts +2 -2
- package/tests/core/workspace-dir-validation.test.ts +8 -1
- package/tests/core-anti-growth.test.ts +191 -0
- package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
- package/tests/hooks/confirm-first-removal.test.ts +188 -0
- package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
- package/tests/hooks/gate-auto-correct.test.ts +665 -0
- package/tests/hooks/gate-no-path-write-tool.test.ts +172 -0
- package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
- package/tests/hooks/pain.test.ts +269 -12
- package/tests/hooks/prompt-characterization.test.ts +500 -0
- package/tests/hooks/prompt-size-guard.test.ts +32 -17
- package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
- package/tests/index.test.ts +94 -1
- package/tests/integration/auto-entry-gate.test.ts +248 -0
- package/tests/integration/internalization-trigger-guard.test.ts +69 -0
- package/tests/integration/m8-legacy-paths.test.ts +63 -0
- package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
- package/tests/plugin-config-resolution-cutover.test.ts +359 -0
- package/tests/runtime-v2-discovery-guard.test.ts +154 -0
- package/tests/service/central-database.test.ts +457 -0
- package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
- package/tests/service/evolution-worker.timeout.test.ts +11 -129
- package/tests/service/internalization-trigger-adapter.test.ts +251 -0
- package/tests/service/monitoring-query-service.test.ts +1 -47
- package/tests/service/queue-io.test.ts +1 -62
- package/tests/service/runtime-summary-service.test.ts +3 -1
- package/tests/service/workflow-watchdog.test.ts +0 -91
- package/tests/utils/file-lock.test.ts +5 -3
- package/tests/utils/session-key.test.ts +52 -0
- package/tests/utils/subagent-probe.test.ts +48 -1
- package/vitest.config.ts +4 -11
- package/.planning/codebase/ARCHITECTURE.md +0 -157
- package/.planning/codebase/CONCERNS.md +0 -145
- package/.planning/codebase/CONVENTIONS.md +0 -148
- package/.planning/codebase/INTEGRATIONS.md +0 -81
- package/.planning/codebase/STACK.md +0 -87
- package/.planning/codebase/STRUCTURE.md +0 -193
- package/.planning/codebase/TESTING.md +0 -243
- package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
- package/docs/COMMAND_REFERENCE.md +0 -76
- package/docs/COMMAND_REFERENCE_EN.md +0 -79
- package/scripts/build-web.mjs +0 -46
- package/scripts/diagnose-nocturnal.mjs +0 -537
- package/scripts/seed-nocturnal-scenarios.mjs +0 -384
- package/src/commands/nocturnal-review.ts +0 -322
- package/src/commands/nocturnal-rollout.ts +0 -790
- package/src/commands/nocturnal-train.ts +0 -986
- package/src/commands/pd-reflect.ts +0 -88
- package/src/core/adaptive-thresholds.ts +0 -478
- package/src/core/diagnostician-task-store.ts +0 -192
- package/src/core/nocturnal-arbiter.ts +0 -715
- package/src/core/nocturnal-artifact-lineage.ts +0 -116
- package/src/core/nocturnal-artificer.ts +0 -257
- package/src/core/nocturnal-candidate-scoring.ts +0 -530
- package/src/core/nocturnal-compliance.ts +0 -1146
- package/src/core/nocturnal-dataset.ts +0 -763
- package/src/core/nocturnal-executability.ts +0 -428
- package/src/core/nocturnal-export.ts +0 -499
- package/src/core/nocturnal-paths.ts +0 -240
- package/src/core/nocturnal-reasoning-deriver.ts +0 -343
- package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
- package/src/core/nocturnal-snapshot-contract.ts +0 -99
- package/src/core/nocturnal-trajectory-extractor.ts +0 -512
- package/src/core/nocturnal-trinity-types.ts +0 -218
- package/src/core/nocturnal-trinity.ts +0 -2680
- package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
- package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
- package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
- package/src/http/principles-console-route.ts +0 -709
- package/src/service/central-health-service.ts +0 -49
- package/src/service/central-overview-service.ts +0 -138
- package/src/service/control-ui-query-service.ts +0 -900
- package/src/service/cooldown-strategy.ts +0 -97
- package/src/service/evolution-pain-context.ts +0 -79
- package/src/service/evolution-query-service.ts +0 -407
- package/src/service/health-query-service.ts +0 -1038
- package/src/service/nocturnal-config.ts +0 -214
- package/src/service/nocturnal-runtime.ts +0 -734
- package/src/service/nocturnal-service.ts +0 -1605
- package/src/service/nocturnal-target-selector.ts +0 -545
- package/src/service/sleep-cycle.ts +0 -157
- package/src/service/startup-reconciler.ts +0 -112
- package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
- package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
- package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
- package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
- package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
- package/src/tools/write-pain-flag.ts +0 -215
- package/templates/langs/en/skills/plan-script/SKILL.md +0 -32
- package/templates/langs/zh/skills/plan-script/SKILL.md +0 -32
- package/tests/commands/nocturnal-review.test.ts +0 -448
- package/tests/commands/nocturnal-train.test.ts +0 -97
- package/tests/commands/pd-reflect.test.ts +0 -49
- package/tests/core/adaptive-thresholds.test.ts +0 -261
- package/tests/core/nocturnal-arbiter.test.ts +0 -559
- package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
- package/tests/core/nocturnal-artificer.test.ts +0 -241
- package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
- package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
- package/tests/core/nocturnal-compliance.test.ts +0 -646
- package/tests/core/nocturnal-dataset.test.ts +0 -892
- package/tests/core/nocturnal-e2e.test.ts +0 -234
- package/tests/core/nocturnal-executability.test.ts +0 -357
- package/tests/core/nocturnal-export.test.ts +0 -517
- package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
- package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
- package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
- package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
- package/tests/core/nocturnal-trinity.test.ts +0 -2053
- package/tests/core/pain-auto-repair.test.ts +0 -96
- package/tests/core/pain-integration.test.ts +0 -510
- package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
- package/tests/http/principles-console-route.test.ts +0 -162
- package/tests/integration/chaos-resilience.test.ts +0 -348
- package/tests/integration/empathy-workflow-integration.test.ts +0 -626
- package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
- package/tests/service/control-ui-query-service.test.ts +0 -121
- package/tests/service/cooldown-strategy.test.ts +0 -164
- package/tests/service/data-endpoints-regression.test.ts +0 -834
- package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
- package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
- package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
- package/tests/service/nocturnal-runtime.test.ts +0 -473
- package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
- package/tests/service/nocturnal-target-selector.test.ts +0 -615
- package/tests/service/startup-reconciler.test.ts +0 -148
- package/tests/tools/write-pain-flag.test.ts +0 -358
- package/ui/src/App.tsx +0 -45
- package/ui/src/api.ts +0 -220
- package/ui/src/charts.tsx +0 -955
- package/ui/src/components/ErrorState.tsx +0 -6
- package/ui/src/components/Loading.tsx +0 -13
- package/ui/src/components/ProtectedRoute.tsx +0 -12
- package/ui/src/components/Shell.tsx +0 -91
- package/ui/src/components/WorkspaceConfig.tsx +0 -178
- package/ui/src/components/index.ts +0 -5
- package/ui/src/context/auth.tsx +0 -80
- package/ui/src/context/theme.tsx +0 -66
- package/ui/src/hooks/useAutoRefresh.ts +0 -39
- package/ui/src/i18n/ui.ts +0 -473
- package/ui/src/main.tsx +0 -16
- package/ui/src/pages/EvolutionPage.tsx +0 -333
- package/ui/src/pages/FeedbackPage.tsx +0 -138
- package/ui/src/pages/GateMonitorPage.tsx +0 -136
- package/ui/src/pages/LoginPage.tsx +0 -89
- package/ui/src/pages/OverviewPage.tsx +0 -599
- package/ui/src/pages/SamplesPage.tsx +0 -174
- package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
- package/ui/src/styles.css +0 -2020
- package/ui/src/types.ts +0 -384
- package/ui/src/utils/format.ts +0 -15
package/src/hooks/subagent.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { PluginHookSubagentEndedEvent, PluginHookSubagentContext, PluginLogger, OpenClawPluginApi } from '../openclaw-sdk.js';
|
|
2
|
-
import { buildPainFlag, writePainFlag } from '../core/pain.js';
|
|
3
2
|
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
4
3
|
import { extractAgentIdFromSessionKey } from '../utils/session-key.js';
|
|
5
|
-
// No longer needed — diagnostician runs via HEARTBEAT, not subagent
|
|
6
4
|
import { recordEvolutionSuccess } from '../core/evolution-engine.js';
|
|
7
5
|
import { WorkflowStore } from '../service/subagent-workflow/workflow-store.js';
|
|
8
|
-
import { EmpathyObserverWorkflowManager } from '../service/subagent-workflow/empathy-observer-workflow-manager.js';
|
|
9
6
|
import type { WorkflowManager } from '../service/subagent-workflow/types.js';
|
|
10
7
|
|
|
11
8
|
/**
|
|
@@ -16,24 +13,8 @@ import type { WorkflowManager } from '../service/subagent-workflow/types.js';
|
|
|
16
13
|
|
|
17
14
|
function createWorkflowManagerForType(
|
|
18
15
|
workflowType: string,
|
|
19
|
-
workspaceDir: string,
|
|
20
|
-
logger: HookLogger,
|
|
21
|
-
subagent: NonNullable<OpenClawPluginApi['runtime']>['subagent'],
|
|
22
16
|
): WorkflowManager | null {
|
|
23
|
-
const loggerAdapter: PluginLogger = {
|
|
24
|
-
info: (m: string) => logger.info(String(m)),
|
|
25
|
-
warn: (m: string) => logger.warn(String(m)),
|
|
26
|
-
error: (m: string) => logger.error(String(m)),
|
|
27
|
-
debug: () => { /* no-op */ },
|
|
28
|
-
};
|
|
29
|
-
|
|
30
17
|
switch (workflowType) {
|
|
31
|
-
case 'empathy-observer':
|
|
32
|
-
return new EmpathyObserverWorkflowManager({
|
|
33
|
-
workspaceDir,
|
|
34
|
-
logger: loggerAdapter,
|
|
35
|
-
subagent,
|
|
36
|
-
});
|
|
37
18
|
default:
|
|
38
19
|
return null;
|
|
39
20
|
}
|
|
@@ -113,7 +94,7 @@ export async function handleSubagentEnded(
|
|
|
113
94
|
// triggers notifyWaitResult → finalizeOnce / terminal transition.
|
|
114
95
|
const subagentRuntime = ctx.api?.runtime?.subagent;
|
|
115
96
|
if (subagentRuntime) {
|
|
116
|
-
const mgr = createWorkflowManagerForType(workflow.workflow_type
|
|
97
|
+
const mgr = createWorkflowManagerForType(workflow.workflow_type);
|
|
117
98
|
if (mgr) {
|
|
118
99
|
await mgr.notifyLifecycleEvent(workflow.workflow_id, 'subagent_ended', { outcome: mappedOutcome });
|
|
119
100
|
mgr.dispose();
|
|
@@ -146,15 +127,7 @@ export async function handleSubagentEnded(
|
|
|
146
127
|
const score = scoreSettings.subagent_error_penalty;
|
|
147
128
|
const reason = `Subagent session ${targetSessionKey} ended with error`;
|
|
148
129
|
|
|
149
|
-
|
|
150
|
-
source: 'subagent_error',
|
|
151
|
-
score: String(score),
|
|
152
|
-
reason,
|
|
153
|
-
is_risky: true,
|
|
154
|
-
session_id: ctx.sessionId || '',
|
|
155
|
-
agent_id: ctx.agentId || extractAgentIdFromSessionKey(targetSessionKey) || '',
|
|
156
|
-
}));
|
|
157
|
-
|
|
130
|
+
// Emit pain via Runtime v2 chain (M8: no .pain_flag file)
|
|
158
131
|
emitSubagentPainEvent(wctx, {
|
|
159
132
|
source: `subagent_error`,
|
|
160
133
|
reason,
|
package/src/i18n/commands.ts
CHANGED
|
@@ -37,10 +37,6 @@ export const commandDescriptions: Record<string, Record<SupportedLanguage, strin
|
|
|
37
37
|
zh: '管理思维模型 [status|propose|audit]',
|
|
38
38
|
en: 'Manage Thinking OS [status|propose|audit]'
|
|
39
39
|
},
|
|
40
|
-
'pd-reflect': {
|
|
41
|
-
zh: '手动触发 Nocturnal 睡眠反射(跳过 idle 检测)',
|
|
42
|
-
en: 'Manually trigger Nocturnal sleep reflection (bypass idle check)'
|
|
43
|
-
},
|
|
44
40
|
'pd-daily': {
|
|
45
41
|
zh: '配置并发送进化日报',
|
|
46
42
|
en: 'Configure and send daily evolution report'
|
|
@@ -78,17 +74,13 @@ export const commandDescriptions: Record<string, Record<SupportedLanguage, strin
|
|
|
78
74
|
en: 'Rollback empathy event penalty <event-id>|last'
|
|
79
75
|
},
|
|
80
76
|
'pd-export': {
|
|
81
|
-
zh: '导出数据 [analytics|corrections --redacted
|
|
82
|
-
en: 'Export data [analytics|corrections --redacted
|
|
77
|
+
zh: '导出数据 [analytics|corrections --redacted]',
|
|
78
|
+
en: 'Export data [analytics|corrections --redacted]'
|
|
83
79
|
},
|
|
84
80
|
'pd-samples': {
|
|
85
81
|
zh: '查看或审核纠错样本 [review approve|reject <sample-id> [note]]',
|
|
86
82
|
en: 'List or review correction samples [review approve|reject <sample-id> [note]]'
|
|
87
83
|
},
|
|
88
|
-
'pd-nocturnal-review': {
|
|
89
|
-
zh: '审核 nocturnal 数据集样本 [list|show|approve|reject|set-family|stats]',
|
|
90
|
-
en: 'Review nocturnal dataset samples [list|show|approve|reject|set-family|stats]'
|
|
91
|
-
}
|
|
92
84
|
};
|
|
93
85
|
|
|
94
86
|
/**
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
OpenClawPluginApi,
|
|
3
|
+
PluginCommandContext,
|
|
3
4
|
PluginHookBeforePromptBuildEvent,
|
|
4
5
|
PluginHookAgentContext,
|
|
5
6
|
PluginHookBeforePromptBuildResult,
|
|
@@ -31,22 +32,18 @@ import * as TrajectoryCollector from './hooks/trajectory-collector.js';
|
|
|
31
32
|
import { handleInitStrategy, handleManageOkr } from './commands/strategy.js';
|
|
32
33
|
import { handleBootstrapTools, handleResearchTools } from './commands/capabilities.js';
|
|
33
34
|
import { handleThinkingOs } from './commands/thinking-os.js';
|
|
34
|
-
import { handlePainCommand } from './commands/pain.js';
|
|
35
|
+
import { handlePainCommand, handlePainReportCommand } from './commands/pain.js';
|
|
35
36
|
import { handleContextCommand } from './commands/context.js';
|
|
36
37
|
import { handleFocusCommand } from './commands/focus.js';
|
|
37
38
|
import { handleRollbackCommand } from './commands/rollback.js';
|
|
38
39
|
import { handlePromoteImplCommand } from './commands/promote-impl.js';
|
|
39
40
|
import { handleDisableImplCommand } from './commands/disable-impl.js';
|
|
40
|
-
import { handlePdReflect } from './commands/pd-reflect.js';
|
|
41
41
|
import { handleArchiveImplCommand } from './commands/archive-impl.js';
|
|
42
42
|
import { handleRollbackImplCommand } from './commands/rollback-impl.js';
|
|
43
43
|
import { handleEvolutionStatusCommand } from './commands/evolution-status.js';
|
|
44
44
|
import { handlePrincipleRollbackCommand } from './commands/principle-rollback.js';
|
|
45
45
|
import { handleExportCommand } from './commands/export.js';
|
|
46
46
|
import { handleSamplesCommand } from './commands/samples.js';
|
|
47
|
-
import { handleNocturnalReviewCommand } from './commands/nocturnal-review.js';
|
|
48
|
-
import { handleNocturnalTrainCommand } from './commands/nocturnal-train.js';
|
|
49
|
-
import { handleNocturnalRolloutCommand } from './commands/nocturnal-rollout.js';
|
|
50
47
|
import { handleWorkflowDebugCommand } from './commands/workflow-debug.js';
|
|
51
48
|
import { EvolutionWorkerService } from './service/evolution-worker.js';
|
|
52
49
|
import { TrajectoryService } from './service/trajectory-service.js';
|
|
@@ -55,22 +52,22 @@ import { CentralSyncService } from './service/central-sync-service.js';
|
|
|
55
52
|
import { ensureWorkspaceTemplates } from './core/init.js';
|
|
56
53
|
import { migrateDirectoryStructure } from './core/migration.js';
|
|
57
54
|
import { SystemLogger } from './core/system-logger.js';
|
|
58
|
-
import { createWritePainFlagTool } from './tools/write-pain-flag.js';
|
|
59
55
|
import { PathResolver } from './core/path-resolver.js';
|
|
60
|
-
import { createPrinciplesConsoleRoute } from './http/principles-console-route.js';
|
|
61
|
-
import { extractAgentIdFromSessionKey } from './utils/session-key.js';
|
|
62
56
|
import { resolveCommandWorkspaceDir, resolveToolHookWorkspaceDirSafe } from './utils/workspace-resolver.js';
|
|
63
57
|
import { computeRuntimeShadowTaskFingerprint, PD_LOCAL_PROFILES } from './utils/shadow-fingerprint.js';
|
|
64
58
|
import type { WorkerProfile } from './core/model-deployment-registry.js';
|
|
65
59
|
import { validateWorkspaceDir } from './core/workspace-dir-validation.js';
|
|
66
60
|
import { resolveWorkspaceDirFromApi } from './core/path-resolver.js';
|
|
67
|
-
import { resolveRequiredWorkspaceDir } from './core/workspace-dir-service.js';
|
|
68
61
|
|
|
69
62
|
// Track initialization to avoid repeated calls
|
|
70
63
|
let workspaceInitialized = false;
|
|
71
64
|
// Track started evolution workers — one per workspace
|
|
72
65
|
const startedWorkspaces = new Set<string>();
|
|
73
66
|
|
|
67
|
+
const HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION =
|
|
68
|
+
'verify gateway plugin activation and hook workspace binding; ' +
|
|
69
|
+
'migrate live hook workspace resolution to PD-owned canonical configuration before relying on config-based recovery';
|
|
70
|
+
|
|
74
71
|
// Map from childSessionKey → shadowObservationId
|
|
75
72
|
// Used to complete shadow observations when subagent ends
|
|
76
73
|
const pendingShadowObservations = new Map<string, string>();
|
|
@@ -82,7 +79,6 @@ const plugin = {
|
|
|
82
79
|
register(api: OpenClawPluginApi) {
|
|
83
80
|
api.logger.info(`Principles Disciple Plugin registered. (Path: ${api.rootDir ?? '(unknown)'})`);
|
|
84
81
|
PathResolver.setExtensionRoot(api.rootDir ?? '.');
|
|
85
|
-
api.registerHttpRoute(createPrinciplesConsoleRoute(api));
|
|
86
82
|
|
|
87
83
|
// ── Startup Health Check: Verify workspaceDir resolution ──
|
|
88
84
|
// Catches OpenClaw context bugs early (e.g., missing workspaceDir in tool hooks)
|
|
@@ -106,7 +102,16 @@ const plugin = {
|
|
|
106
102
|
'before_prompt_build',
|
|
107
103
|
async (event: PluginHookBeforePromptBuildEvent, ctx: PluginHookAgentContext): Promise<PluginHookBeforePromptBuildResult | void> => {
|
|
108
104
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'before_prompt_build');
|
|
109
|
-
if (!workspaceDir)
|
|
105
|
+
if (!workspaceDir) {
|
|
106
|
+
api.logger.error(
|
|
107
|
+
`[PD:before_prompt_build] workspaceDir resolution failed. ` +
|
|
108
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'} ` +
|
|
109
|
+
`sessionKey=${ctx.sessionKey ?? '(missing)'}. ` +
|
|
110
|
+
`Hook skipped — no mutation will occur. ` +
|
|
111
|
+
`NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
112
|
+
);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
110
115
|
try {
|
|
111
116
|
if (!workspaceInitialized) {
|
|
112
117
|
migrateDirectoryStructure(api, workspaceDir);
|
|
@@ -131,7 +136,7 @@ const plugin = {
|
|
|
131
136
|
api.logger.info(`[PD] EvolutionWorker started for workspace: ${workspaceDir}`);
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
const result = await handleBeforePromptBuild(event, { ...ctx, api, workspaceDir });
|
|
139
|
+
const result = await handleBeforePromptBuild(event, { ...ctx, api: api as Parameters<typeof handleBeforePromptBuild>[1]['api'], workspaceDir });
|
|
135
140
|
|
|
136
141
|
// Record success
|
|
137
142
|
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
@@ -156,7 +161,16 @@ const plugin = {
|
|
|
156
161
|
'before_tool_call',
|
|
157
162
|
(event: PluginHookBeforeToolCallEvent, ctx: PluginHookToolContext): PluginHookBeforeToolCallResult | void => {
|
|
158
163
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'before_tool_call');
|
|
159
|
-
if (!workspaceDir)
|
|
164
|
+
if (!workspaceDir) {
|
|
165
|
+
api.logger.error(
|
|
166
|
+
`[PD:before_tool_call] workspaceDir resolution failed. ` +
|
|
167
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'} ` +
|
|
168
|
+
`sessionKey=${ctx.sessionKey ?? '(missing)'}. ` +
|
|
169
|
+
`Hook skipped — security gate bypassed. ` +
|
|
170
|
+
`NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
171
|
+
);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
160
174
|
try {
|
|
161
175
|
const pluginConfig = api.pluginConfig ?? {};
|
|
162
176
|
const {logger} = api;
|
|
@@ -182,7 +196,16 @@ const plugin = {
|
|
|
182
196
|
'after_tool_call',
|
|
183
197
|
(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => {
|
|
184
198
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'after_tool_call');
|
|
185
|
-
if (!workspaceDir)
|
|
199
|
+
if (!workspaceDir) {
|
|
200
|
+
api.logger.error(
|
|
201
|
+
`[PD:after_tool_call] workspaceDir resolution failed. ` +
|
|
202
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'} ` +
|
|
203
|
+
`sessionKey=${ctx.sessionKey ?? '(missing)'}. ` +
|
|
204
|
+
`Hook skipped — pain detection bypassed. ` +
|
|
205
|
+
`NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
206
|
+
);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
186
209
|
try {
|
|
187
210
|
const pluginConfig = api.pluginConfig ?? {};
|
|
188
211
|
// Pass api separately to handleAfterToolCall to maintain type safety
|
|
@@ -205,8 +228,17 @@ const plugin = {
|
|
|
205
228
|
api.on(
|
|
206
229
|
'llm_output',
|
|
207
230
|
(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
|
|
208
|
-
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx
|
|
209
|
-
if (!workspaceDir)
|
|
231
|
+
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'llm_output');
|
|
232
|
+
if (!workspaceDir) {
|
|
233
|
+
api.logger.error(
|
|
234
|
+
`[PD:llm_output] workspaceDir resolution failed. ` +
|
|
235
|
+
`agentId=${ctx.agentId ?? '(missing)'} ` +
|
|
236
|
+
`sessionId=${ctx.sessionId ?? '(missing)'}. ` +
|
|
237
|
+
`Hook skipped — LLM analysis bypassed. ` +
|
|
238
|
+
`NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
239
|
+
);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
210
242
|
try {
|
|
211
243
|
handleLlmOutput(event, { ...ctx, workspaceDir });
|
|
212
244
|
|
|
@@ -245,7 +277,7 @@ const plugin = {
|
|
|
245
277
|
'llm_output',
|
|
246
278
|
(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
|
|
247
279
|
try {
|
|
248
|
-
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx
|
|
280
|
+
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'trajectory.llm_output');
|
|
249
281
|
if (!workspaceDir) return;
|
|
250
282
|
TrajectoryCollector.handleLlmOutput(event, { ...ctx, workspaceDir });
|
|
251
283
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- Reason: catch binding intentionally unused
|
|
@@ -341,19 +373,40 @@ const plugin = {
|
|
|
341
373
|
// ── Hook: Lifecycle ──
|
|
342
374
|
api.on('before_reset', (event: PluginHookBeforeResetEvent, ctx: PluginHookAgentContext) => {
|
|
343
375
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'before_reset');
|
|
344
|
-
if (!workspaceDir)
|
|
376
|
+
if (!workspaceDir) {
|
|
377
|
+
api.logger.error(
|
|
378
|
+
`[PD:before_reset] workspaceDir resolution failed. ` +
|
|
379
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'}. ` +
|
|
380
|
+
`Hook skipped. NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
381
|
+
);
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
345
384
|
return handleBeforeReset(event, { ...ctx, workspaceDir });
|
|
346
385
|
});
|
|
347
386
|
|
|
348
387
|
api.on('before_compaction', (event: PluginHookBeforeCompactionEvent, ctx: PluginHookAgentContext) => {
|
|
349
388
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'before_compaction');
|
|
350
|
-
if (!workspaceDir)
|
|
389
|
+
if (!workspaceDir) {
|
|
390
|
+
api.logger.error(
|
|
391
|
+
`[PD:before_compaction] workspaceDir resolution failed. ` +
|
|
392
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'}. ` +
|
|
393
|
+
`Hook skipped. NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
394
|
+
);
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
351
397
|
return handleBeforeCompaction(event, { ...ctx, workspaceDir });
|
|
352
398
|
});
|
|
353
399
|
|
|
354
400
|
api.on('after_compaction', (event: PluginHookAfterCompactionEvent, ctx: PluginHookAgentContext) => {
|
|
355
401
|
const workspaceDir = resolveToolHookWorkspaceDirSafe(ctx, api, 'after_compaction');
|
|
356
|
-
if (!workspaceDir)
|
|
402
|
+
if (!workspaceDir) {
|
|
403
|
+
api.logger.error(
|
|
404
|
+
`[PD:after_compaction] workspaceDir resolution failed. ` +
|
|
405
|
+
`agentId=${ctx.agentId ?? '(missing)'} sessionId=${ctx.sessionId ?? '(missing)'}. ` +
|
|
406
|
+
`Hook skipped. NextAction: ${HOOK_WORKSPACE_RESOLUTION_NEXT_ACTION}`,
|
|
407
|
+
);
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
357
410
|
return handleAfterCompaction(event, { ...ctx, workspaceDir });
|
|
358
411
|
});
|
|
359
412
|
|
|
@@ -399,17 +452,6 @@ const plugin = {
|
|
|
399
452
|
|
|
400
453
|
registerCommandWithAlias('pd-thinking', 'pdt', getCommandDescription('pd-thinking', language), (ctx: any) => handleThinkingOs(ctx), { acceptsArgs: true });
|
|
401
454
|
|
|
402
|
-
registerCommandWithAlias('pd-reflect', 'pdrl', getCommandDescription('pd-reflect', language), (ctx: any) => {
|
|
403
|
-
try {
|
|
404
|
-
// Resolve agentId from sessionKey (if available), fallback to 'main'
|
|
405
|
-
const agentId = extractAgentIdFromSessionKey(ctx.sessionKey) ?? 'main';
|
|
406
|
-
const workspaceDir = resolveRequiredWorkspaceDir(api, { ...ctx, agentId }, { source: 'pd-reflect', fallbackAgentId: 'main' });
|
|
407
|
-
return handlePdReflect.handler({ ...ctx, api, workspaceDir });
|
|
408
|
-
} catch (err) {
|
|
409
|
-
api.logger.error(`[PD:pd-reflect] Command failed: ${String(err)}`);
|
|
410
|
-
return { text: language === 'zh' ? '命令执行失败,请查看日志。' : 'Command failed. Check logs.' };
|
|
411
|
-
}
|
|
412
|
-
});
|
|
413
455
|
registerCommandWithAlias('pd-daily', 'pdd', getCommandDescription('pd-daily', language), () => ({
|
|
414
456
|
text: language === 'zh'
|
|
415
457
|
? "请执行 pd-daily 技能来配置并发送进化日报。系统将引导你完成配置流程,包括发送时间、渠道和报告风格偏好。"
|
|
@@ -437,7 +479,6 @@ const plugin = {
|
|
|
437
479
|
|--------|--------|------|
|
|
438
480
|
| \`/pdk\` | \`/pd-okr\` | OKR 目标管理 |
|
|
439
481
|
| \`/pdt\` | \`/pd-thinking\` | 思维模型管理 |
|
|
440
|
-
| \`/pdrl\` | \`/pd-reflect\` | 手动触发反思 |
|
|
441
482
|
| \`/pdd\` | \`/pd-daily\` | 进化日报 |
|
|
442
483
|
| \`/pdg\` | \`/pd-grooming\` | 工作区清理 |
|
|
443
484
|
|
|
@@ -449,7 +490,6 @@ const plugin = {
|
|
|
449
490
|
| \`/pd-focus\` | 焦点文件管理 |
|
|
450
491
|
| \`/pd-export\` | 导出数据 |
|
|
451
492
|
| \`/pd-samples\` | 审核纠错样本 |
|
|
452
|
-
| \`/pd-nocturnal-review\` | 审核 nocturnal 样本 |
|
|
453
493
|
| \`/pd-rollback\` | 回滚情绪事件惩罚 |
|
|
454
494
|
| \`/pd-principle-rollback\` | 回滚原则 |
|
|
455
495
|
| \`/pd-help\` | 显示本帮助 |
|
|
@@ -470,7 +510,6 @@ const plugin = {
|
|
|
470
510
|
|-------|------|---------|
|
|
471
511
|
| \`/pdk\` | \`/pd-okr\` | OKR goal management |
|
|
472
512
|
| \`/pdt\` | \`/pd-thinking\` | Mental model management |
|
|
473
|
-
| \`/pdrl\` | \`/pd-reflect\` | Manual reflection trigger |
|
|
474
513
|
| \`/pdd\` | \`/pd-daily\` | Evolution report |
|
|
475
514
|
| \`/pdg\` | \`/pd-grooming\` | Workspace cleanup |
|
|
476
515
|
|
|
@@ -482,7 +521,6 @@ const plugin = {
|
|
|
482
521
|
| \`/pd-focus\` | Focus file management |
|
|
483
522
|
| \`/pd-export\` | Export data |
|
|
484
523
|
| \`/pd-samples\` | Review correction samples |
|
|
485
|
-
| \`/pd-nocturnal-review\` | Review nocturnal samples |
|
|
486
524
|
| \`/pd-rollback\` | Rollback empathy penalty |
|
|
487
525
|
| \`/pd-principle-rollback\` | Rollback principle |
|
|
488
526
|
| \`/pd-help\` | Show this help |
|
|
@@ -507,6 +545,25 @@ const plugin = {
|
|
|
507
545
|
}
|
|
508
546
|
});
|
|
509
547
|
|
|
548
|
+
api.registerCommand({
|
|
549
|
+
name: "pd-pain",
|
|
550
|
+
description: language === 'zh'
|
|
551
|
+
? '从 OpenClaw 会话中报告 pain(context-bound provenance)'
|
|
552
|
+
: 'Report pain from OpenClaw session (context-bound provenance)',
|
|
553
|
+
acceptsArgs: true,
|
|
554
|
+
handler: async (ctx) => {
|
|
555
|
+
try {
|
|
556
|
+
const workspaceDir = resolveCommandWorkspaceDir(api, ctx);
|
|
557
|
+
ctx.workspaceDir = workspaceDir;
|
|
558
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
559
|
+
return await handlePainReportCommand(ctx);
|
|
560
|
+
} catch (err) {
|
|
561
|
+
api.logger.error(`[PD] Command /pd-pain failed: ${String(err)}`);
|
|
562
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
|
|
510
567
|
api.registerCommand({
|
|
511
568
|
name: "pd-context",
|
|
512
569
|
description: getCommandDescription('pd-context', language),
|
|
@@ -620,54 +677,6 @@ const plugin = {
|
|
|
620
677
|
}
|
|
621
678
|
});
|
|
622
679
|
|
|
623
|
-
api.registerCommand({
|
|
624
|
-
name: "pd-nocturnal-review",
|
|
625
|
-
description: 'Review nocturnal dataset samples [list|show|approve|reject|set-family|stats]',
|
|
626
|
-
acceptsArgs: true,
|
|
627
|
-
handler: (ctx) => {
|
|
628
|
-
try {
|
|
629
|
-
const workspaceDir = resolveCommandWorkspaceDir(api, ctx);
|
|
630
|
-
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
631
|
-
return handleNocturnalReviewCommand(ctx);
|
|
632
|
-
} catch (err) {
|
|
633
|
-
api.logger.error(`[PD] Command /pd-nocturnal-review failed: ${String(err)}`);
|
|
634
|
-
return { text: language === 'zh' ? "Nocturnal review 命令执行失败,请检查日志。" : "Nocturnal review command failed. Check logs." };
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
});
|
|
638
|
-
|
|
639
|
-
api.registerCommand({
|
|
640
|
-
name: "nocturnal-train",
|
|
641
|
-
description: 'Nocturnal training operations [create-experiment|show-experiment|import-result|attach-eval|show-lineage|list-experiments|list-checkpoints|stats]',
|
|
642
|
-
acceptsArgs: true,
|
|
643
|
-
handler: (ctx) => {
|
|
644
|
-
try {
|
|
645
|
-
const workspaceDir = resolveCommandWorkspaceDir(api, ctx);
|
|
646
|
-
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
647
|
-
return handleNocturnalTrainCommand(ctx);
|
|
648
|
-
} catch (err) {
|
|
649
|
-
api.logger.error(`[PD] Command /nocturnal-train failed: ${String(err)}`);
|
|
650
|
-
return { text: language === 'zh' ? "Nocturnal train 命令执行失败,请检查日志。" : "Nocturnal train command failed. Check logs." };
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
});
|
|
654
|
-
|
|
655
|
-
api.registerCommand({
|
|
656
|
-
name: "nocturnal-rollout",
|
|
657
|
-
description: 'Nocturnal rollout and promotion [evaluate-promotion|advance-promotion|bind|enable-routing|disable-routing|rollback|status|show-promotion]',
|
|
658
|
-
acceptsArgs: true,
|
|
659
|
-
handler: (ctx) => {
|
|
660
|
-
try {
|
|
661
|
-
const workspaceDir = resolveCommandWorkspaceDir(api, ctx);
|
|
662
|
-
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
663
|
-
return handleNocturnalRolloutCommand(ctx);
|
|
664
|
-
} catch (err) {
|
|
665
|
-
api.logger.error(`[PD] Command /nocturnal-rollout failed: ${String(err)}`);
|
|
666
|
-
return { text: language === 'zh' ? "Nocturnal rollout 命令执行失败,请检查日志。" : "Nocturnal rollout command failed. Check logs." };
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
});
|
|
670
|
-
|
|
671
680
|
api.registerCommand({
|
|
672
681
|
name: "pd-workflow-debug",
|
|
673
682
|
description: 'Debug helper workflow state and events [workflowId]',
|
|
@@ -676,7 +685,7 @@ const plugin = {
|
|
|
676
685
|
try {
|
|
677
686
|
const workspaceDir = resolveCommandWorkspaceDir(api, ctx);
|
|
678
687
|
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
679
|
-
return handleWorkflowDebugCommand(ctx);
|
|
688
|
+
return handleWorkflowDebugCommand(ctx as PluginCommandContext & { args?: string });
|
|
680
689
|
} catch (err) {
|
|
681
690
|
api.logger.error(`[PD] Command /pd-workflow-debug failed: ${String(err)}`);
|
|
682
691
|
return { text: `Workflow debug command failed: ${String(err)}` };
|
|
@@ -749,8 +758,9 @@ const plugin = {
|
|
|
749
758
|
}
|
|
750
759
|
});
|
|
751
760
|
|
|
752
|
-
api.registerTool(createWritePainFlagTool(api));
|
|
753
761
|
}
|
|
754
762
|
};
|
|
755
763
|
|
|
764
|
+
export { PrincipleTreeLedgerAdapter } from './core/principle-tree-ledger-adapter.js';
|
|
765
|
+
|
|
756
766
|
export default plugin;
|