@lmzhen/dsh-evolution-core 0.30.38 → 0.30.40
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/lib/index.js
CHANGED
|
@@ -2503,8 +2503,6 @@ const DEFAULT_PROBE_TIMEOUT_MS = 12e4;
|
|
|
2503
2503
|
* the policy resolver and the curator's LLM nomination pass each carried their
|
|
2504
2504
|
* own copy of these strings — a deployment that changed the policy default used
|
|
2505
2505
|
* to leave the curator passing a different model than the reviews. */
|
|
2506
|
-
const DEFAULT_MEMORY_REVIEW_MODEL = "deepseek-v4-flash";
|
|
2507
|
-
const DEFAULT_SKILL_REVIEW_MODEL = "deepseek-v4-pro";
|
|
2508
2506
|
const DEFAULT_CURATOR_MODEL = "deepseek-v4-pro";
|
|
2509
2507
|
/** Order of the `evolution:memory-guidance` section (before the skills one). */
|
|
2510
2508
|
const MEMORY_GUIDANCE_SECTION_ORDER = 11e3;
|
|
@@ -4407,6 +4405,10 @@ async function readExternalSupport(body, sourceDir, allowedRoot, targetFiles) {
|
|
|
4407
4405
|
}
|
|
4408
4406
|
//#endregion
|
|
4409
4407
|
//#region lib/types/extract-request.js
|
|
4408
|
+
/** The one human-readable owner decision shared by tool and CLI. */
|
|
4409
|
+
function ownerDecisionText(owner) {
|
|
4410
|
+
return owner.mode === "covered" ? "covered by " + (owner.name ?? "unknown") : "owner-gap, neededOwner=" + (owner.neededOwner ?? "unknown");
|
|
4411
|
+
}
|
|
4410
4412
|
/** Build the one extract plan both the tool and CLI consume. */
|
|
4411
4413
|
async function buildExtractPlanFromLibrary(library, input) {
|
|
4412
4414
|
const source = input.source.trim();
|
|
@@ -4518,7 +4520,7 @@ async function buildExtractPlanFromLibrary(library, input) {
|
|
|
4518
4520
|
ok: false,
|
|
4519
4521
|
message: "目标「" + target + "」不是家族 managed 技能;拒绝把可复用部分写进不受管目录。"
|
|
4520
4522
|
};
|
|
4521
|
-
if (input.ownerCovers
|
|
4523
|
+
if (input.ownerCovers !== true) {
|
|
4522
4524
|
const parsed = parseFrontmatter(sourceMd);
|
|
4523
4525
|
if (parsed === null) return {
|
|
4524
4526
|
ok: false,
|
|
@@ -4594,7 +4596,7 @@ async function buildExtractPlanFromLibrary(library, input) {
|
|
|
4594
4596
|
ok: false,
|
|
4595
4597
|
message: "outcome 只能是 extract 或 mixed;owner-gap 由缺失 target 的路径自动决定。"
|
|
4596
4598
|
};
|
|
4597
|
-
const outcome = input.outcome ??
|
|
4599
|
+
const outcome = input.outcome ?? "extract";
|
|
4598
4600
|
const plan = planExtract({
|
|
4599
4601
|
body: parsed.body,
|
|
4600
4602
|
sourceName: source,
|
|
@@ -17287,28 +17289,6 @@ const PARAM_EXPOSURE = Object.freeze([
|
|
|
17287
17289
|
summary: "Name this package registers as the memory provider.",
|
|
17288
17290
|
why: "identity"
|
|
17289
17291
|
},
|
|
17290
|
-
{
|
|
17291
|
-
id: "memoryReviewModel",
|
|
17292
|
-
group: "deployment",
|
|
17293
|
-
tier: "E2",
|
|
17294
|
-
authority: "cordis",
|
|
17295
|
-
owner: "evolution-review",
|
|
17296
|
-
applies: "none",
|
|
17297
|
-
docAnchor: "PARAMETERS.md#deployment",
|
|
17298
|
-
summary: "Model for the memory review channel (deployment identity).",
|
|
17299
|
-
why: "identity"
|
|
17300
|
-
},
|
|
17301
|
-
{
|
|
17302
|
-
id: "skillReviewModel",
|
|
17303
|
-
group: "deployment",
|
|
17304
|
-
tier: "E2",
|
|
17305
|
-
authority: "cordis",
|
|
17306
|
-
owner: "evolution-review",
|
|
17307
|
-
applies: "none",
|
|
17308
|
-
docAnchor: "PARAMETERS.md#deployment",
|
|
17309
|
-
summary: "Model for the skill review channel (deployment identity).",
|
|
17310
|
-
why: "identity"
|
|
17311
|
-
},
|
|
17312
17292
|
{
|
|
17313
17293
|
id: "maxOpsPerPlan",
|
|
17314
17294
|
group: "deployment",
|
|
@@ -18257,4 +18237,4 @@ function isIgnorableEvent(event) {
|
|
|
18257
18237
|
return classifySessionEvent(event) !== "model";
|
|
18258
18238
|
}
|
|
18259
18239
|
//#endregion
|
|
18260
|
-
export { AUTHORING_DESCRIPTION_BAR, AUTHORING_SPLIT_LINE_CHARS, BASELINE_ACTION, CITATION_SUPPORT_DIRS, COMBINED_REVIEW_PLAN_PROMPT, COMBINED_REVIEW_PROMPT, COMPLETION_SKILL_REVIEW_PROMPT, CONTENT_SPLIT_HINT, COST_ASCII_TOKEN_HIGH, COST_ASCII_TOKEN_LOW, COST_CJK_TOKEN_HIGH, COST_CJK_TOKEN_LOW, CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEDUP_MAX_PAIR_COMPARISONS, DEDUP_SIMILARITY_THRESHOLD, DEFAULT_ADMISSION, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_ARCHIVE_RETENTION_POLICY, DEFAULT_CITATION_POLICY, DEFAULT_CITATION_REF_BUDGET, DEFAULT_CONSOLIDATION_FAILURES, DEFAULT_CURATOR_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MAX_OPS_PER_PLAN, DEFAULT_MEMORY_CHAR_LIMIT,
|
|
18240
|
+
export { AUTHORING_DESCRIPTION_BAR, AUTHORING_SPLIT_LINE_CHARS, BASELINE_ACTION, CITATION_SUPPORT_DIRS, COMBINED_REVIEW_PLAN_PROMPT, COMBINED_REVIEW_PROMPT, COMPLETION_SKILL_REVIEW_PROMPT, CONTENT_SPLIT_HINT, COST_ASCII_TOKEN_HIGH, COST_ASCII_TOKEN_LOW, COST_CJK_TOKEN_HIGH, COST_CJK_TOKEN_LOW, CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEDUP_MAX_PAIR_COMPARISONS, DEDUP_SIMILARITY_THRESHOLD, DEFAULT_ADMISSION, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_ARCHIVE_RETENTION_POLICY, DEFAULT_CITATION_POLICY, DEFAULT_CITATION_REF_BUDGET, DEFAULT_CONSOLIDATION_FAILURES, DEFAULT_CURATOR_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MAX_OPS_PER_PLAN, DEFAULT_MEMORY_CHAR_LIMIT, DEFAULT_MIN_IDLE_HOURS, DEFAULT_MUTATION_CAP, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_REFERENCE_REWRITE_POLICY, DEFAULT_REVIEW_CONTEXT_MESSAGES, DEFAULT_REVIEW_MEMORY_INTERVAL, DEFAULT_REVIEW_MESSAGE_CHARS, DEFAULT_REVIEW_SKILL_INTERVAL, DEFAULT_REVIEW_TIMEOUT_MS, DEFAULT_RUN_RECORDS, DEFAULT_SKILL_CONTENT_CHARS, DEFAULT_SKILL_LIMITS, DEFAULT_SKILL_REVIEW_COMPLETION_MIN_TOOL_CALLS, DEFAULT_SKILL_REVIEW_TRIGGER, DEFAULT_SKILL_VERSION_KEEP, DEFAULT_STALE_AFTER_DAYS, DEFAULT_SUBSTANTIVE_MIN_AGENT_CHARS, DEFAULT_SUBSTANTIVE_MIN_TOOL_CALLS, DEFAULT_SUBSTANTIVE_MIN_USER_CHARS, DEFAULT_SUPPORT_FILE_CHAR_POLICY, DEFAULT_SUPPORT_READ_TOOL_NAMES, DEFAULT_THREAT_MAX_SCAN_CHARS, DEFAULT_USER_CHAR_LIMIT, DEFAULT_WRITE_CONFIRM_MODE, DEFAULT_WRITE_CONFIRM_TIMEOUT_SECONDS, DIAGNOSTICS_FACT_KEYS, DIAGNOSTICS_RUNTIME_KEYS, DIAGNOSTICS_VIEW_SCHEMA_VERSION, DISPATCH_EVENT_TYPES, DRIFT_MAX_LINE_CHARS, DRIFT_SIGNALS_VERSION, DRIFT_SIGNAL_NOUNS, DSH_AUTHORING_STANDARDS, ENTRY_DELIMITER, EVENT_ARCHIVE_PREFIX, EVENT_LOG_RETAIN_ARCHIVES, EVENT_LOG_ROTATE_AT, EVENT_LOG_VERSION, EVOLUTION_ERRORS, EVOLUTION_PRESET_IDS, EVOLUTION_WRITE_TOOLS, EXTRACT_PROMPT_HASH, EXTRACT_PROMPT_V1, EXTRACT_PROMPT_VERSION, EvolutionGateSet, FAMILY_SESSION_TOOL_NAMES, FORBIDDEN_CONTROL_KEYS, FUZZY_MAX_PATTERN_CHARS, FUZZY_MAX_WORK, HEALTH_STAMP_RE, HISTORY_DIR, HISTORY_INDEX_VERSION, HOOK_LINE_RE, HOST_ROUTES, INSTANCE_KEYS, KEEP_LINE_RE, LONG_RUNS, LOW_QUALITY_THRESHOLD, MAINTAINER_PRESET_ID, MAINTAIN_OUTPUT_INSTRUCTION, MAINTAIN_PROMPT, MAX_DESCRIPTION_LENGTH, MAX_REQUEST_BODY_BYTES, MAX_RESTRUCTURE_MOVES, MAX_SKILL_CONTENT_CHARS, MAX_SKILL_FILE_BYTES, MAX_SKILL_NAME_LENGTH, MAX_SUPPORT_READ_PATHS, MAX_TIMER_DELAY_MS, MEMORY_GUIDANCE_SECTION_ORDER, MEMORY_REVIEW_PROMPT, MIN_STAMP_BODY_CHARS, MODEL_SESSION_EVENT_TYPES as MODEL_SESSION_EVENTS, MODEL_SESSION_EVENT_TYPES, MUTATIONS_FILE_VERSION, MemoryStore, MutationUnit, NAMESPACE_MIGRATIONS, NATIVE_CALL_EVENT, NATIVE_RESULT_EVENT, PARAM_ALIASES, PARAM_EXPOSURE, PARAM_GROUP_LABELS, PARAM_NAMESPACES, PATTERN_OVERLAP, PLATFORM_CATALOG_DESCRIPTION_DEFAULT, PLATFORM_ESTIMATE_CHARS_PER_TOKEN, PLATFORM_LINE, PLATFORM_SERVICE_PROBES, POLICY_STAGE_DEFAULTS, PROMPT_BUNDLE, PROMPT_BUNDLE_ID, PROMPT_BUNDLE_VERSION, PROTECTED_BUILTIN_SKILLS, PTC_DISPATCH_EVENT, PTC_DISPATCH_START_EVENT, QUALITY_WEIGHTS, READ_REQUIRED_ACTIONS, RESTRICTED_PRESET_DISPLAY, RESTRICTED_TOOLS_ROW_ID, RESTRICTOR_MODULE, RESTRUCTURE_TARGET_RE, RETENTION_FEEDBACK_KEEP_RATIO, RETENTION_FEEDBACK_MIN_CHARS, REVIEWER_PRESET_ID, RULES, RUNS_SCHEMA_VERSION, SKILLS_GUIDANCE, SKILLS_GUIDANCE_SECTION_ORDER, SKILL_ACTION_REQUIRED_FIELDS, SKILL_NAME_RE, SKILL_REVIEW_PLAN_PROMPT, SKILL_REVIEW_PROMPT, SNAPSHOT_EXTRA_NAME_RE, STORE_LEDGER, SUMMARY_DUPLICATE_HINT_THRESHOLD, SUPPORT_DIRS, SUPPORT_SPRAWL_FILES, SUPPRESSED_FILE_VERSION, SkillLibrary, SkillModel, TEXT_DIFF_MAX_CHARS, TEXT_DIFF_MAX_LINES, THREAT_EXEMPTION_HINT, TOKEN_ASCII_WEIGHT, TOKEN_CJK_WEIGHT, ToolDispatchNormalizer, ToolDispatchPayloadError, UNIT_JOURNAL_PHASES, UNIT_JOURNAL_SCHEMA_VERSION, UNIT_STORAGE_SCHEMA_VERSION, UNTRUSTED_LINE_BREAK, UNTRUSTED_LINE_MARK, UPSTREAM_LIMIT_CHARS_PER_TOKEN, UnitTransactions, VERSION_SUMMARY_MAX_CHARS, absentHostServices, acquireTreeWriteLock, admissionVerdict, advanceReview, affinity, ageCopyKey, allowRowCollisions, anchorVerdict, appendEvolutionEvent, applyCuratorLifecycleFields, applyCuratorMetaFields, applyNamespaceMigration, applyReferenceRewrite, asRecord, assertDispatchPayload, assertSkillsRootAliasRetired, assertUnitJournalTransition, assessStructureHealth, atomicWriteFiles, authoringFeedback, authorityFrom, backupsReachability, blobPath, bodyCost, buildCuratorRunReport, buildExtractPlanFromLibrary, buildHealthBaseline, buildLearnPrompt, bumpPatch, bumpSupportRead, bumpUse, bumpView, callingScope, candidateSkills, canonicalWriteId, claimInstance, clampOnce, clampedNumber, classifyNamespaceMigration, classifySessionEvent, clearReviewChannel, collectReadSkillNames, computeDedupGroups, computeDriftSignals, computeLifecycleTransitions, computePrefixClusters, computeQualityScores, computeScopeView, contentHash, contentRetentionFeedback, countDispatches, countReferenceFiles, createGateSet, createSubagentChannel, daysSinceIso, declaredReportStamp, describeReferenceRewrite, diffFindings, dispatchKeyOf, dispatchStepOf, displayBodyOf, duplicateHeadings, elapsedSince, emptyRecord, ensureSkillFrontmatter, entryTarget, errorText, evaluateThreat, eventsFile, evidenceKindIndex, evolutionActivityProjection, evolutionEventPayloadIssue, evolutionEvidenceProjection, evolutionHome, evolutionIoAdapter, evolutionReadsProjection, evolutionRoot, evolutionSignalsProjection, executeUnitUndo, externalRefs, fileMutationLock, filterUnreadSkillOps, findDriftSignal, findOwnerCandidate, foldCuratorFields, foldToolDispatches, foldTurnEvent, foldTurnEvents, foldUntrustedLines, frontmatterBlock, frontmatterCatalogInvalid, fuzzyPatch, getRecord, h2Sections, historyIndexFile, historyReachability, historyRoot, hostSurface, identity, idleDays, initialTurnFold, installEvolutionProjections, instanceClaimKey, instanceClaimedWriteSites, instanceHolder, isAbsent, isBookkeepingFrame, isCommittedWarning, isDeprecatedParamId, isFileShapedPath, isIgnorableEvent, isLandmark, isMissingPath, isPresent, isProcessAlive, isProgramToolName, isRecord, isReviewChannelSession, isSkillReadToolName, isSkillToolName, isUnknown, isUnreadWrite, json, landmarkVerdict, latestActivityAt, latestVersionAt, lifecycleCandidate, lintBody, lintSkill, listEventArchives, liveBool, liveEnum, liveNumber, liveString, loadMutations, loadSuppressedNames, loadUsage, loadVersionContent, loadVersions, makeSerialQueue, mapProbe, markAgentCreated, markReviewChannel, markerEntryName, memoryRoot, methodNotAllowed, missingSupportPointers, mutateUsage, mutationsFile, narrowNameMatches, nearDuplicateSummaries, newRunRegistry, newSkillLibrary, nextHistoryIndex, nodeEvolutionIo, normalizeFrontmatter, normalizeUsageRecord, normalizeVersionSummary, observeEvent, orderVersions, overlongLines, ownerCandidatesFromSummaries, ownerDecisionText, paramNamespace, paramRowId, paramSettingsId, parseCuratorNominations, parseEvolutionEvents, parseFrontmatter, parseHistoryIndex, partitionVersions, payloadText, persistedWriteSite, persistedWriteSites, pickWithPolicy, planExtract, planNamespaceMigration, planReferenceRewrite, planRehoming, planUnitUndoAcross, policyStageLimits, probeAbsent, probeChannelState, probeList, probeMtime, probePresent, probeReason, probeText, probeUnknown, projectExtractBodies, projectionText, proposalFromPlan, proposalReportDir, proposalReportName, protectedSkillNamesOf, readDispatchSignal, readEvolutionEvents, readEvolutionTimeline, readExternalSupport, readHistoryIndex, readJsonObject, readNumberParam, readParam, readProposalReports, readTreeLock, readUnitEvidence, readUnitIndex, readUnitJournal, readUnitReceipt, readUnitSnapshot, readingStats, recordMutation, recordVersions, redactSecrets, referencedBlobs, registerHostRoutes, relatedSkillNames, releaseInstance, renameWithRetry, renderCuratorReportMarkdown, renderLongRunTable, reportTime, reportsReachability, reportsSweepLockTarget, resolveCitations, resolveExecOrigins, resolveOrigins, resolveParamId, resolveRootConfig, resolveSkillsRoot, resolveUnitMembers, resolveUnitMembersFromIndexes, restructureCandidates, retainEventArchives, retirementReport, reviewPrompt, revisionAnchor, revisionAnchorOf, revisionFingerprint, revisionSupportDigest, runWriteGates, runsFile, saveSuppressedNames, saveUsage, scanBodyHooks, scanContentThreats, scanMemoryThreats, scanThreats, scopeOfNearestManifest, scopedPackageName, scopedProbeReport, selectSections, sessionAudited, sessionEvidenceIndex, sessionLastEventTime, sessionReadNames, sessionReadSkillNames, sessionSeesFamilyTools, sessionTurnSignals, skillLibraryUnitBackend, skillReadNameOf, skillRowCells, skillStateKey, skillWriteGateContext, skillsRoot, staleRouteStubs, subagentChannelState, supportFileReadOf, supportRefs, suppressedFile, sweepReports, sweepReviewChannelSessions, textDiffFacts, tokenLineFor, transactIo, transactTaskGuard, treeLockFile, trimPatternBoundaries, unhookedSupportPointers, unitEvidenceDigest, unitEvidencePath, unitIndexPath, unitJournalPath, unitJournalPhaseRank, unitJournalPort, unitMembersAreComplete, unitReceiptPath, unitSnapshotPath, unitSnapshotPort, unitSnapshotsDir, unitStorageKey, unwrapLive, updateSuppressedNames, upsertUnitIndex, usageFile, usageObserved, userSetKeys, validateFrontmatter, validateMutationRequest, validateRestructureTarget, validateSupportPath, valueOr, verifyPromptBundle, versionActionKind, versionRowCells, versionSummaryPrompt, versionTarget, vocabulary, withTreeWrite, withTreeWriteLock, writeDurableTmp, writePathSymbols, writeProposalReport, writeUnitEvidence, writeUnitJournal, writeUnitReceipt, writeUnitSnapshot, yamlPlainScalarNeedsQuotes };
|
package/lib/types/constants.d.ts
CHANGED
|
@@ -184,8 +184,6 @@ export declare const DEFAULT_PROBE_TIMEOUT_MS = 120000;
|
|
|
184
184
|
* the policy resolver and the curator's LLM nomination pass each carried their
|
|
185
185
|
* own copy of these strings — a deployment that changed the policy default used
|
|
186
186
|
* to leave the curator passing a different model than the reviews. */
|
|
187
|
-
export declare const DEFAULT_MEMORY_REVIEW_MODEL = "deepseek-v4-flash";
|
|
188
|
-
export declare const DEFAULT_SKILL_REVIEW_MODEL = "deepseek-v4-pro";
|
|
189
187
|
export declare const DEFAULT_CURATOR_MODEL = "deepseek-v4-pro";
|
|
190
188
|
/** Order of the `evolution:memory-guidance` section (before the skills one). */
|
|
191
189
|
export declare const MEMORY_GUIDANCE_SECTION_ORDER = 11000;
|
package/lib/types/constants.js
CHANGED
|
@@ -203,8 +203,6 @@ export const DEFAULT_PROBE_TIMEOUT_MS = 120_000;
|
|
|
203
203
|
* the policy resolver and the curator's LLM nomination pass each carried their
|
|
204
204
|
* own copy of these strings — a deployment that changed the policy default used
|
|
205
205
|
* to leave the curator passing a different model than the reviews. */
|
|
206
|
-
export const DEFAULT_MEMORY_REVIEW_MODEL = 'deepseek-v4-flash';
|
|
207
|
-
export const DEFAULT_SKILL_REVIEW_MODEL = 'deepseek-v4-pro';
|
|
208
206
|
export const DEFAULT_CURATOR_MODEL = 'deepseek-v4-pro';
|
|
209
207
|
// ── Model-visible prompt-section orders ──────────────────────────────────────
|
|
210
208
|
// The platform's `PromptSection.order` scale is a platform-internal constant
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type OwnerCandidate } from './owner-resolver.ts';
|
|
2
|
-
import { type ExtractPlanDraft } from './extract-plan.ts';
|
|
2
|
+
import { type ExtractPlanDraft, type OwnerDecision } from './extract-plan.ts';
|
|
3
3
|
import type { SkillLibrary } from './skill-store.ts';
|
|
4
4
|
import type { SkillModel } from './skill-model.ts';
|
|
5
5
|
export type ExtractPlanLibrary = Pick<SkillLibrary, 'root' | 'read' | 'listSupportFiles'> & {
|
|
@@ -24,6 +24,8 @@ export interface ExtractRequestPlan {
|
|
|
24
24
|
candidates: OwnerCandidate[];
|
|
25
25
|
warnings?: string[];
|
|
26
26
|
}
|
|
27
|
+
/** The one human-readable owner decision shared by tool and CLI. */
|
|
28
|
+
export declare function ownerDecisionText(owner: OwnerDecision): string;
|
|
27
29
|
/** Build the one extract plan both the tool and CLI consume. */
|
|
28
30
|
export declare function buildExtractPlanFromLibrary(library: ExtractPlanLibrary, input: ExtractRequestInput): Promise<ExtractRequestPlan | {
|
|
29
31
|
ok: false;
|
|
@@ -7,6 +7,10 @@ import { findOwnerCandidate, ownerCandidatesFromSummaries } from "./owner-resolv
|
|
|
7
7
|
import { nearDuplicateSummaries } from "./quality.js";
|
|
8
8
|
import { planExtract } from "./extract-plan.js";
|
|
9
9
|
import { readExternalSupport } from "./external-support.js";
|
|
10
|
+
/** The one human-readable owner decision shared by tool and CLI. */
|
|
11
|
+
export function ownerDecisionText(owner) {
|
|
12
|
+
return owner.mode === 'covered' ? 'covered by ' + (owner.name ?? 'unknown') : 'owner-gap, neededOwner=' + (owner.neededOwner ?? 'unknown');
|
|
13
|
+
}
|
|
10
14
|
/** Build the one extract plan both the tool and CLI consume. */
|
|
11
15
|
export async function buildExtractPlanFromLibrary(library, input) {
|
|
12
16
|
const source = input.source.trim();
|
|
@@ -81,7 +85,8 @@ export async function buildExtractPlanFromLibrary(library, input) {
|
|
|
81
85
|
return { ok: false, message: '目标「' + target + '」不是可用的 owner candidate(描述为空或已排除);owner-gap,不自动 create。' + candidateHint };
|
|
82
86
|
if (!candidate.managed)
|
|
83
87
|
return { ok: false, message: '目标「' + target + '」不是家族 managed 技能;拒绝把可复用部分写进不受管目录。' };
|
|
84
|
-
|
|
88
|
+
// EXT-002: existence of a target is not evidence of coverage; only an explicit true covers.
|
|
89
|
+
if (input.ownerCovers !== true) {
|
|
85
90
|
const parsed = parseFrontmatter(sourceMd);
|
|
86
91
|
if (parsed === null)
|
|
87
92
|
return { ok: false, message: '技能「' + source + '」没有可读取的正文。' };
|
|
@@ -130,7 +135,8 @@ export async function buildExtractPlanFromLibrary(library, input) {
|
|
|
130
135
|
if (input.outcome !== undefined && input.outcome !== 'extract' && input.outcome !== 'mixed') {
|
|
131
136
|
return { ok: false, message: 'outcome 只能是 extract 或 mixed;owner-gap 由缺失 target 的路径自动决定。' };
|
|
132
137
|
}
|
|
133
|
-
|
|
138
|
+
// G2.4: outcome is semantic input, never inferred from anchor shape.
|
|
139
|
+
const outcome = input.outcome ?? 'extract';
|
|
134
140
|
const plan = planExtract({
|
|
135
141
|
body: parsed.body,
|
|
136
142
|
sourceName: source,
|
package/lib/types/params.js
CHANGED
|
@@ -178,8 +178,6 @@ export const PARAM_EXPOSURE = Object.freeze([
|
|
|
178
178
|
{ id: 'evolution-state.provider', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-state', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Registered state-store provider name.', why: 'identity' },
|
|
179
179
|
{ id: 'memory.provider', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'memory', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Registered memory provider name.', why: 'identity' },
|
|
180
180
|
{ id: 'memory-files.providerName', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'memory-files', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Name this package registers as the memory provider.', why: 'identity' },
|
|
181
|
-
{ id: 'memoryReviewModel', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-review', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Model for the memory review channel (deployment identity).', why: 'identity' },
|
|
182
|
-
{ id: 'skillReviewModel', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-review', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Model for the skill review channel (deployment identity).', why: 'identity' },
|
|
183
181
|
{ id: 'maxOpsPerPlan', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-plan-validator', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Operation cap one staged plan may carry.', why: 'internal' },
|
|
184
182
|
{ id: 'substantiveMinToolCalls', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-review', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'Tool calls that make a turn count as substantive.', why: 'internal' },
|
|
185
183
|
{ id: 'substantiveMinUserChars', group: 'deployment', tier: 'E2', authority: 'cordis', owner: 'evolution-review', applies: 'none', docAnchor: 'PARAMETERS.md#deployment', summary: 'User characters that make a turn count as substantive.', why: 'internal' },
|
|
@@ -49,7 +49,7 @@ export declare const HEALTH_STAMP_RE: RegExp;
|
|
|
49
49
|
* warned on a perfectly healthy body (audit 2026-08-31 X1).
|
|
50
50
|
*/
|
|
51
51
|
export declare const MIN_STAMP_BODY_CHARS = 2000;
|
|
52
|
-
export type SkillHealthVerdict = 'healthy' | 'warn' | 'needs-restructure';
|
|
52
|
+
export type SkillHealthVerdict = 'healthy' | 'warn' | 'needs-restructure' | 'unreadable';
|
|
53
53
|
/** Facts a caller already has; assessors never do IO.
|
|
54
54
|
*
|
|
55
55
|
* `bodyChars`/`bodyText` are the WHOLE `SKILL.md` text as read from disk
|
package/package.json
CHANGED