@mrciphersmith/keryx 0.3.91 → 0.3.93

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.
Files changed (3) hide show
  1. package/dist/cli.js +10 -3
  2. package/dist/core.js +133 -123
  3. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -21105,7 +21105,7 @@ var package_default;
21105
21105
  var init_package = __esm(() => {
21106
21106
  package_default = {
21107
21107
  name: "@mrciphersmith/keryx",
21108
- version: "0.3.91",
21108
+ version: "0.3.93",
21109
21109
  description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
21110
21110
  private: false,
21111
21111
  publishConfig: {
@@ -82968,7 +82968,8 @@ function buildAgentSystemInstruction(orient, ctx = {}) {
82968
82968
  ` + locateRule + "- read_file returns a bounded window starting at `start_line` (default 1). A large file " + "is read by paging: its truncation notice names the start_line to continue from, and a " + `line number from ${hasGraph ? "search_code or graph_symbol" : "search_code"} can be read directly \u2014 do not re-read the ` + `same head hoping for more.
82969
82969
  ` + "- Prefer ONE correct shell_exec over many exploratory tool calls when the user asks " + `to run a known keryx workflow.
82970
82970
  ` + "- Tool-call budget: shell_exec, file-mutating shell, workspace_create/workspace_propose, and spawn_subagent " + "all share ONE small per-turn pool (distinct non-read actions), separate from the much larger read-tool pool. " + (hasGraph ? "search_code/graph_*/memory_search/read_wiki/wiki_*/test_related/health_status/flow_status/repomap/read_file/" : "search_code/read_file/") + "list_dir do NOT touch it. Conserve the small pool: batch multiple shell steps into ONE call with `&&` instead " + "of issuing them one at a time, get a command's arguments right the first time instead of trying variants, and " + "for any check covered by a read tool above, use that tool instead of shelling out to the equivalent `keryx \u2026` " + `CLI command.
82971
- ` + "- For multi-step work, use **plan_set** to publish a structured plan, **plan_update** after each real status " + "change, and **plan_get** before resolving a revision conflict. Keep stable item ids, at most one " + "`in_progress` item, and do not mark work complete before verification. These tools update session metadata " + "only; `/plan` remains the operator's separate read-only permission mode.\n" + "- **Publishing a plan FOR APPROVAL is a real, supported stopping point.** Mark the items `proposed`, " + "state the plan in your reply, and END THE TURN \u2014 that is exactly what `proposed` is for. When the " + "operator approves, move those items to `pending`/`in_progress` and continue. Use `pending` (not " + "`proposed`) only when you are going to execute the plan in this same turn.\n" + "- The plan is published so the operator can see progress; it is not what decides when a turn may end. " + "End a turn whenever the user's request is answered, you are genuinely blocked, or the next step needs " + "the operator's input \u2014 regardless of whether plan items are still `pending`/`in_progress`.\n" + "- This session has its own Slate (working-set scratch, not project knowledge): " + "**slate_read** shows the Course (if a Flow is bound) and Seeds recorded so far \u2014 nothing " + "here is auto-injected, so call it if you want to see it. **slate_write_seed** with " + "`{ text, kind? }` records a draft hypothesis/decision/follow-up worth a later human " + "review. WRITE A SEED when you: found a root cause or a bug worth remembering; changed or " + "added code (summarize WHAT changed and WHY); took a design/architecture decision; " + "identified a risk; or discovered a constraint/lesson. Use the `kind` that fits: " + "`decision` (a choice made), `wiki-update` (something a wiki page should say), " + "`memory-entry` (a lesson/constraint), `follow-up` (a TODO for a later session), " + "`risk`, or `contract-change`. Keep each Seed to 2-3 sentences, concrete and specific. " + "Do NOT write Seeds for routine progress notes, one-shot operational requests (e.g. " + '"run git pull", "count files"), or trivia \u2014 those need no workspace and no proposal. ' + "Seeds are the ONLY input wrap-up proposes from: a session whose Slate has zero Seeds " + `produces zero proposals. A Seed is never accepted knowledge by itself.
82971
+ ` + "- For multi-step work, use **plan_set** to publish a structured plan, **plan_update** after each real status " + "change, and **plan_get** before resolving a revision conflict. Keep stable item ids, at most one " + "`in_progress` item, and do not mark work complete before verification. These tools update session metadata " + "only; `/plan` remains the operator's separate read-only permission mode.\n" + '- When the user names a skill ("use review-orchestrator", "\u043F\u043E \u0441\u043A\u0438\u043B\u043B\u0443 X"), your FIRST tool call is ' + (offered("skill_load") ? "**skill_load** for it" : "read_file on its SKILL.md") + ", before any `keryx` command, and you follow its section for this host. A subcommand that only opens " + "or drafts something (`keryx review start`) is one step of that workflow, never the workflow: do not " + `report the task done or stopped on its output.
82972
+ ` + "- **Publishing a plan FOR APPROVAL is a real, supported stopping point.** Mark the items `proposed`, " + "state the plan in your reply, and END THE TURN \u2014 that is exactly what `proposed` is for. When the " + "operator approves, move those items to `pending`/`in_progress` and continue. Use `pending` (not " + "`proposed`) only when you are going to execute the plan in this same turn.\n" + "- The plan is published so the operator can see progress; it is not what decides when a turn may end. " + "End a turn whenever the user's request is answered, you are genuinely blocked, or the next step needs " + "the operator's input \u2014 regardless of whether plan items are still `pending`/`in_progress`.\n" + "- This session has its own Slate (working-set scratch, not project knowledge): " + "**slate_read** shows the Course (if a Flow is bound) and Seeds recorded so far \u2014 nothing " + "here is auto-injected, so call it if you want to see it. **slate_write_seed** with " + "`{ text, kind? }` records a draft hypothesis/decision/follow-up worth a later human " + "review. WRITE A SEED when you: found a root cause or a bug worth remembering; changed or " + "added code (summarize WHAT changed and WHY); took a design/architecture decision; " + "identified a risk; or discovered a constraint/lesson. Use the `kind` that fits: " + "`decision` (a choice made), `wiki-update` (something a wiki page should say), " + "`memory-entry` (a lesson/constraint), `follow-up` (a TODO for a later session), " + "`risk`, or `contract-change`. Keep each Seed to 2-3 sentences, concrete and specific. " + "Do NOT write Seeds for routine progress notes, one-shot operational requests (e.g. " + '"run git pull", "count files"), or trivia \u2014 those need no workspace and no proposal. ' + "Seeds are the ONLY input wrap-up proposes from: a session whose Slate has zero Seeds " + `produces zero proposals. A Seed is never accepted knowledge by itself.
82972
82973
  ` + "- Shared Agent Context (SAC) workspaces hold accepted, evidence-backed project context " + "beyond this codebase. **workspace_list** with `{ includeArchived? }` shows every workspace " + "visible to you \u2014 call it first when the user references a shared team workspace or accepted " + "project context, or before creating a new workspace, to judge whether an existing one " + "already fits the current topic. **workspace_show** with `{ workspaceId }` shows one " + "workspace's manifest. **workspace_overview** with `{ workspaceId }`, then **workspace_read** " + "with `{ workspaceId, itemId }` for one specific item, reads its accepted Facts/Work/Know-how. " + "**workspace_create** with `{ title, component? }` creates a new workspace AND binds it to " + "this session's slate (wrap-up then proposes into it) \u2014 only when workspace_list found no " + "fitting one and the session has real, durable results worth persisting; a workspace is " + "meant to persist across sessions, so prefer an existing one over creating another for the " + "same topic, and do NOT create one for one-shot operational requests. **workspace_propose** with " + "`{ workspaceId, kind, sessionId?, note? }` (sessionId defaults to this session) proposes a decision/wiki-update/memory-entry/" + "follow-up/contract-change/risk from this session for later human review \u2014 it never accepts " + "anything by itself; accepting always requires a human running `keryx workspace review` at a " + `real terminal, never this tool.
82973
82974
  ` + "- When you need a decision, interview step, or clarification: use **ask_user** with " + "2\u20136 options `{ id, label, description, recommended? }` (mark at most one recommended; " + "whenever you mark one, ALWAYS also pass a top-level `recommendationReason`: one sentence on why it is the better choice). " + `Do not dump long prose questions without options.
82974
82975
  ` + "- For a focused independent subtask (investigate X, review Y, research Z): use " + "**spawn_subagent** with `{ task, mode?: 'read_only'|'general', label? }`. " + "Default mode is read_only (no shell). Prefer spawn for work that can finish " + `without your intermediate turns; do not spawn for trivial one-line answers.
@@ -190993,15 +190994,21 @@ function reviewHelpText() {
190993
190994
 
190994
190995
  Usage:
190995
190996
  keryx review attach --flow <id> --target <kind> --ref <ref> [--head <sha>]
190996
- [--reviewers a,b] [--report <path>]
190997
+ [--reviewers a,b] [--report <path>] [--research <ledger.json>]
190997
190998
  keryx review start --target <kind> --ref <ref> [--head <sha>] [--reviewers a,b] [--report <path>]
190999
+ [--research <ledger.json>] [--review-id <id>]
190998
191000
  keryx review ingest --report <path> [--flow <id>] --ref <ref> [--head <sha>]
191001
+ [--research <ledger.json>] [--review-id <id>]
190999
191002
  [--verifications <file|->] [--verification-mode ${VERIFICATION_MODES.join("|")}]
191000
191003
  [--scope <scope.json>] [--blast-radius <blast-radius.json>]
191001
191004
  [--cross-family-review <file|->]
191002
191005
  [--refuted <file|->]
191003
191006
  [--max-findings <n>] [--spent <usd>] [--spend-ceiling <usd>]
191007
+ [--tokens-in <n>] [--tokens-out <n>]
191004
191008
  [--parallel <n>] [--outstanding <n>]
191009
+ --research is the research ledger {version, scopeReviewed, rawReconciled,
191010
+ obligations, dispatch}; without it the package stays PENDING and
191011
+ \`review complete\` refuses on scope, raw reconciliation and dispatch evidence.
191005
191012
  keryx review scope [--ref <base>] [--diff <file|->] [--path a,b] [--context <n>]
191006
191013
  [--json | --scoped-diff] [--append <file>]
191007
191014
  keryx review slice [--ref <base>] [--diff <file|->] [--context <n>]
package/dist/core.js CHANGED
@@ -25202,8 +25202,6 @@ var init_config_dir = __esm(() => {
25202
25202
  });
25203
25203
 
25204
25204
  // src/flow/service.ts
25205
- init_fs();
25206
- init_validator();
25207
25205
  var exports_service2 = {};
25208
25206
  __export(exports_service2, {
25209
25207
  AC_CHECK_TOKEN_BUDGET: () => AC_CHECK_TOKEN_BUDGET,
@@ -25275,6 +25273,139 @@ __export(exports_service2, {
25275
25273
  validateCriterionName: () => validateCriterionName,
25276
25274
  writeAcCheckCache: () => writeAcCheckCache
25277
25275
  });
25276
+
25277
+ // src/gdgraph/service.ts
25278
+ var exports_service5 = {};
25279
+ __export(exports_service5, {
25280
+ UnknownGraphTargetError: () => UnknownGraphTargetError,
25281
+ buildAffectedReport: () => buildAffectedReport,
25282
+ checkGraphStaleness: () => checkGraphStaleness,
25283
+ createGdgraphService: () => createGdgraphService,
25284
+ estimateTokens: () => estimateTokens2
25285
+ });
25286
+
25287
+ // src/health/service.ts
25288
+ var exports_service7 = {};
25289
+ __export(exports_service7, {
25290
+ createCodeHealthService: () => createCodeHealthService,
25291
+ gateExitCode: () => gateExitCode,
25292
+ readWikiFreshnessMetric: () => readWikiFreshnessMetric
25293
+ });
25294
+
25295
+ // src/testing/service.ts
25296
+ var exports_service6 = {};
25297
+ __export(exports_service6, {
25298
+ analyzeTestingProject: () => analyzeTestingProject,
25299
+ buildRelatedTestsReport: () => buildRelatedTestsReport,
25300
+ computeTestingContext: () => computeTestingContext,
25301
+ findRelatedTests: () => findRelatedTests,
25302
+ loadCompatibleTestingReport: () => loadCompatibleTestingReport,
25303
+ loadTestingConfig: () => loadTestingConfig,
25304
+ loadTestingContext: () => loadTestingContext,
25305
+ loadTestingReport: () => loadTestingReport,
25306
+ relatedTestsInContext: () => relatedTestsInContext,
25307
+ runTesting: () => runTesting,
25308
+ selectChangedTests: () => selectChangedTests,
25309
+ testingDataRoot: () => testingDataRoot
25310
+ });
25311
+
25312
+ // src/impact-evidence/index.ts
25313
+ var exports_impact_evidence = {};
25314
+ __export(exports_impact_evidence, {
25315
+ IMPACT_EVIDENCE_HOOK_ID: () => IMPACT_EVIDENCE_HOOK_ID,
25316
+ appendLogRecord: () => appendLogRecord,
25317
+ computeImpactEvidence: () => computeImpactEvidence,
25318
+ createImpactEvidenceProvider: () => createImpactEvidenceProvider,
25319
+ hostDeliveryStatus: () => hostDeliveryStatus,
25320
+ impactEvidenceDataRoot: () => impactEvidenceDataRoot,
25321
+ impactEvidenceHookClass: () => impactEvidenceHookClass,
25322
+ loadSessionState: () => loadSessionState,
25323
+ logPath: () => logPath,
25324
+ normalizeRequestFiles: () => normalizeRequestFiles,
25325
+ readLogRecords: () => readLogRecords,
25326
+ renderEvidenceBlock: () => renderEvidenceBlock,
25327
+ sanitizeSessionId: () => sanitizeSessionId,
25328
+ saveSessionState: () => saveSessionState
25329
+ });
25330
+
25331
+ // src/job/service.ts
25332
+ var exports_service8 = {};
25333
+ __export(exports_service8, {
25334
+ createJobService: () => createJobService
25335
+ });
25336
+
25337
+ // src/sac/service.ts
25338
+ var exports_service9 = {};
25339
+ __export(exports_service9, {
25340
+ POLICY_EXPERIMENT_SANDBOX_PROFILE: () => POLICY_EXPERIMENT_SANDBOX_PROFILE,
25341
+ SEED_TEXT_MAX_LENGTH: () => SEED_TEXT_MAX_LENGTH,
25342
+ SLATE_SEED_KINDS: () => SLATE_SEED_KINDS,
25343
+ WorkspaceService: () => WorkspaceService,
25344
+ WorkspaceServiceError: () => WorkspaceServiceError,
25345
+ buildPolicyCorpus: () => buildPolicyCorpus,
25346
+ closeExternalSlate: () => closeExternalSlate,
25347
+ createHarnessProposalLifecycleService: () => createHarnessProposalLifecycleService,
25348
+ createLocalCollaborationService: () => createLocalCollaborationService,
25349
+ createLocalFwkReadService: () => createLocalFwkReadService,
25350
+ createLocalProposalLifecycleService: () => createLocalProposalLifecycleService,
25351
+ defaultPolicyExperimentConfig: () => defaultPolicyExperimentConfig,
25352
+ evaluatePolicyExperiment: () => evaluatePolicyExperiment,
25353
+ findSession: () => findSession,
25354
+ formatPolicyEvaluationReport: () => formatPolicyEvaluationReport,
25355
+ hashAccessReceipt: () => hashAccessReceipt,
25356
+ hashVerifiedTaskOutcome: () => hashVerifiedTaskOutcome,
25357
+ isExternalSlateStale: () => isExternalSlateStale,
25358
+ isSlateSeedKind: () => isSlateSeedKind,
25359
+ listWorkspaceViews: () => listWorkspaceViews,
25360
+ localWorkspaceAuthorizationServer: () => localWorkspaceAuthorizationServer,
25361
+ lookupWorkspace: () => lookupWorkspace,
25362
+ newWorkspaceId: () => newWorkspaceId,
25363
+ normalizeCollaborationResult: () => normalizeCollaborationResult,
25364
+ normalizeFwkResult: () => normalizeFwkResult,
25365
+ normalizeProposalLifecycleResult: () => normalizeProposalLifecycleResult,
25366
+ normalizeWorkspaceReference: () => normalizeWorkspaceReference,
25367
+ proposalNotePath: () => proposalNotePath,
25368
+ readExternalSlate: () => readExternalSlate,
25369
+ reclaimStaleExternalSlates: () => reclaimStaleExternalSlates,
25370
+ redactSensitiveText: () => redactSensitiveText,
25371
+ requireWorkspaceReference: () => requireWorkspaceReference,
25372
+ resolveOrCreateWorkspace: () => resolveOrCreateWorkspace,
25373
+ resolvePolicyExperiment: () => resolvePolicyExperiment,
25374
+ rollbackPolicyExperiment: () => rollbackPolicyExperiment,
25375
+ sealAccessReceipt: () => sealAccessReceipt,
25376
+ sessionEvidenceRef: () => sessionEvidenceRef,
25377
+ verifyAccessReceiptLedger: () => verifyAccessReceiptLedger,
25378
+ writeExternalSlate: () => writeExternalSlate
25379
+ });
25380
+
25381
+ // src/standard/service.ts
25382
+ var exports_service10 = {};
25383
+ __export(exports_service10, {
25384
+ HELP_DEFAULT_COLUMNS: () => HELP_DEFAULT_COLUMNS,
25385
+ HELP_GROUPS: () => HELP_GROUPS,
25386
+ HELP_GROUP_ORDER: () => HELP_GROUP_ORDER,
25387
+ HIDDEN_FROM_HELP: () => HIDDEN_FROM_HELP,
25388
+ allHelpTokens: () => allHelpTokens,
25389
+ closestHelpTopics: () => closestHelpTopics,
25390
+ entriesInGroup: () => entriesInGroup,
25391
+ findCliEntry: () => findCliEntry,
25392
+ findEntry: () => findEntry,
25393
+ findSlashEntry: () => findSlashEntry,
25394
+ groupBySlug: () => groupBySlug,
25395
+ renderCliGroupHelp: () => renderCliGroupHelp,
25396
+ renderCommandsByTaskMarkdown: () => renderCommandsByTaskMarkdown,
25397
+ renderEntryDetail: () => renderEntryDetail,
25398
+ renderGroupedCliHelp: () => renderGroupedCliHelp,
25399
+ renderGroupedNamedHelp: () => renderGroupedNamedHelp,
25400
+ renderGroupedSlashHelp: () => renderGroupedSlashHelp,
25401
+ runCapabilities: () => runCapabilities,
25402
+ runDoctor: () => runDoctor,
25403
+ runValidate: () => runValidate
25404
+ });
25405
+
25406
+ // src/flow/service.ts
25407
+ init_fs();
25408
+ init_validator();
25278
25409
  import { mkdir as mkdir12, readFile as readFile29 } from "fs/promises";
25279
25410
  import path57 from "path";
25280
25411
 
@@ -30169,16 +30300,6 @@ async function acCriterionKnown(input) {
30169
30300
  const known = await readAcCriteria(input.cwd, dir);
30170
30301
  return known.includes(normalized);
30171
30302
  }
30172
- // src/gdgraph/service.ts
30173
- var exports_service5 = {};
30174
- __export(exports_service5, {
30175
- UnknownGraphTargetError: () => UnknownGraphTargetError,
30176
- buildAffectedReport: () => buildAffectedReport,
30177
- checkGraphStaleness: () => checkGraphStaleness,
30178
- createGdgraphService: () => createGdgraphService,
30179
- estimateTokens: () => estimateTokens2
30180
- });
30181
-
30182
30303
  // src/gdgraph/build.ts
30183
30304
  import { mkdir as mkdir22, readdir as readdir14, readFile as readFile41, writeFile as writeFile16 } from "fs/promises";
30184
30305
  import { existsSync as existsSync7 } from "fs";
@@ -31836,12 +31957,6 @@ function createGdgraphService() {
31836
31957
  // src/health/service.ts
31837
31958
  init_fs();
31838
31959
  init_json();
31839
- var exports_service7 = {};
31840
- __export(exports_service7, {
31841
- createCodeHealthService: () => createCodeHealthService,
31842
- gateExitCode: () => gateExitCode,
31843
- readWikiFreshnessMetric: () => readWikiFreshnessMetric
31844
- });
31845
31960
  import path104 from "path";
31846
31961
 
31847
31962
  // src/health/config.ts
@@ -33241,21 +33356,6 @@ var typescriptAdapter = {
33241
33356
  // src/testing/service.ts
33242
33357
  init_fs();
33243
33358
  init_contained_write();
33244
- var exports_service6 = {};
33245
- __export(exports_service6, {
33246
- analyzeTestingProject: () => analyzeTestingProject,
33247
- buildRelatedTestsReport: () => buildRelatedTestsReport,
33248
- computeTestingContext: () => computeTestingContext,
33249
- findRelatedTests: () => findRelatedTests,
33250
- loadCompatibleTestingReport: () => loadCompatibleTestingReport,
33251
- loadTestingConfig: () => loadTestingConfig,
33252
- loadTestingContext: () => loadTestingContext,
33253
- loadTestingReport: () => loadTestingReport,
33254
- relatedTestsInContext: () => relatedTestsInContext,
33255
- runTesting: () => runTesting,
33256
- selectChangedTests: () => selectChangedTests,
33257
- testingDataRoot: () => testingDataRoot
33258
- });
33259
33359
  import { existsSync as existsSync12 } from "fs";
33260
33360
  import { readFile as readFile51, readdir as readdir16 } from "fs/promises";
33261
33361
  import path100 from "path";
@@ -35377,25 +35477,6 @@ function createCodeHealthService() {
35377
35477
  }
35378
35478
  };
35379
35479
  }
35380
- // src/impact-evidence/index.ts
35381
- var exports_impact_evidence = {};
35382
- __export(exports_impact_evidence, {
35383
- IMPACT_EVIDENCE_HOOK_ID: () => IMPACT_EVIDENCE_HOOK_ID,
35384
- appendLogRecord: () => appendLogRecord,
35385
- computeImpactEvidence: () => computeImpactEvidence,
35386
- createImpactEvidenceProvider: () => createImpactEvidenceProvider,
35387
- hostDeliveryStatus: () => hostDeliveryStatus,
35388
- impactEvidenceDataRoot: () => impactEvidenceDataRoot,
35389
- impactEvidenceHookClass: () => impactEvidenceHookClass,
35390
- loadSessionState: () => loadSessionState,
35391
- logPath: () => logPath,
35392
- normalizeRequestFiles: () => normalizeRequestFiles,
35393
- readLogRecords: () => readLogRecords,
35394
- renderEvidenceBlock: () => renderEvidenceBlock,
35395
- sanitizeSessionId: () => sanitizeSessionId,
35396
- saveSessionState: () => saveSessionState
35397
- });
35398
-
35399
35480
  // src/impact-evidence/types.ts
35400
35481
  var IMPACT_EVIDENCE_HOOK_ID = "keryx.impact-evidence";
35401
35482
  // src/impact-evidence/evidence.ts
@@ -35869,10 +35950,6 @@ function hostDeliveryStatus() {
35869
35950
  }
35870
35951
  // src/job/service.ts
35871
35952
  init_fs();
35872
- var exports_service8 = {};
35873
- __export(exports_service8, {
35874
- createJobService: () => createJobService
35875
- });
35876
35953
  import { copyFile, mkdir as mkdir30 } from "fs/promises";
35877
35954
  import path109 from "path";
35878
35955
 
@@ -36291,50 +36368,6 @@ function createJobService(deps) {
36291
36368
  // src/core.ts
36292
36369
  init_service3();
36293
36370
 
36294
- // src/sac/service.ts
36295
- var exports_service9 = {};
36296
- __export(exports_service9, {
36297
- POLICY_EXPERIMENT_SANDBOX_PROFILE: () => POLICY_EXPERIMENT_SANDBOX_PROFILE,
36298
- SEED_TEXT_MAX_LENGTH: () => SEED_TEXT_MAX_LENGTH,
36299
- SLATE_SEED_KINDS: () => SLATE_SEED_KINDS,
36300
- WorkspaceService: () => WorkspaceService,
36301
- WorkspaceServiceError: () => WorkspaceServiceError,
36302
- buildPolicyCorpus: () => buildPolicyCorpus,
36303
- closeExternalSlate: () => closeExternalSlate,
36304
- createHarnessProposalLifecycleService: () => createHarnessProposalLifecycleService,
36305
- createLocalCollaborationService: () => createLocalCollaborationService,
36306
- createLocalFwkReadService: () => createLocalFwkReadService,
36307
- createLocalProposalLifecycleService: () => createLocalProposalLifecycleService,
36308
- defaultPolicyExperimentConfig: () => defaultPolicyExperimentConfig,
36309
- evaluatePolicyExperiment: () => evaluatePolicyExperiment,
36310
- findSession: () => findSession,
36311
- formatPolicyEvaluationReport: () => formatPolicyEvaluationReport,
36312
- hashAccessReceipt: () => hashAccessReceipt,
36313
- hashVerifiedTaskOutcome: () => hashVerifiedTaskOutcome,
36314
- isExternalSlateStale: () => isExternalSlateStale,
36315
- isSlateSeedKind: () => isSlateSeedKind,
36316
- listWorkspaceViews: () => listWorkspaceViews,
36317
- localWorkspaceAuthorizationServer: () => localWorkspaceAuthorizationServer,
36318
- lookupWorkspace: () => lookupWorkspace,
36319
- newWorkspaceId: () => newWorkspaceId,
36320
- normalizeCollaborationResult: () => normalizeCollaborationResult,
36321
- normalizeFwkResult: () => normalizeFwkResult,
36322
- normalizeProposalLifecycleResult: () => normalizeProposalLifecycleResult,
36323
- normalizeWorkspaceReference: () => normalizeWorkspaceReference,
36324
- proposalNotePath: () => proposalNotePath,
36325
- readExternalSlate: () => readExternalSlate,
36326
- reclaimStaleExternalSlates: () => reclaimStaleExternalSlates,
36327
- redactSensitiveText: () => redactSensitiveText,
36328
- requireWorkspaceReference: () => requireWorkspaceReference,
36329
- resolveOrCreateWorkspace: () => resolveOrCreateWorkspace,
36330
- resolvePolicyExperiment: () => resolvePolicyExperiment,
36331
- rollbackPolicyExperiment: () => rollbackPolicyExperiment,
36332
- sealAccessReceipt: () => sealAccessReceipt,
36333
- sessionEvidenceRef: () => sessionEvidenceRef,
36334
- verifyAccessReceiptLedger: () => verifyAccessReceiptLedger,
36335
- writeExternalSlate: () => writeExternalSlate
36336
- });
36337
-
36338
36371
  // src/sac/fwk-service.ts
36339
36372
  import { createHash as createHash23, randomUUID as randomUUID4 } from "crypto";
36340
36373
 
@@ -41685,29 +41718,6 @@ init_service2();
41685
41718
 
41686
41719
  // src/standard/service.ts
41687
41720
  init_fs();
41688
- var exports_service10 = {};
41689
- __export(exports_service10, {
41690
- HELP_DEFAULT_COLUMNS: () => HELP_DEFAULT_COLUMNS,
41691
- HELP_GROUPS: () => HELP_GROUPS,
41692
- HELP_GROUP_ORDER: () => HELP_GROUP_ORDER,
41693
- HIDDEN_FROM_HELP: () => HIDDEN_FROM_HELP,
41694
- allHelpTokens: () => allHelpTokens,
41695
- closestHelpTopics: () => closestHelpTopics,
41696
- entriesInGroup: () => entriesInGroup,
41697
- findCliEntry: () => findCliEntry,
41698
- findEntry: () => findEntry,
41699
- findSlashEntry: () => findSlashEntry,
41700
- groupBySlug: () => groupBySlug,
41701
- renderCliGroupHelp: () => renderCliGroupHelp,
41702
- renderCommandsByTaskMarkdown: () => renderCommandsByTaskMarkdown,
41703
- renderEntryDetail: () => renderEntryDetail,
41704
- renderGroupedCliHelp: () => renderGroupedCliHelp,
41705
- renderGroupedNamedHelp: () => renderGroupedNamedHelp,
41706
- renderGroupedSlashHelp: () => renderGroupedSlashHelp,
41707
- runCapabilities: () => runCapabilities,
41708
- runDoctor: () => runDoctor,
41709
- runValidate: () => runValidate
41710
- });
41711
41721
  import path129 from "path";
41712
41722
  import { readFile as readFile70 } from "fs/promises";
41713
41723
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrciphersmith/keryx",
3
- "version": "0.3.91",
3
+ "version": "0.3.93",
4
4
  "description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
5
5
  "private": false,
6
6
  "publishConfig": {