kiokuko-dsh 0.2.6 → 0.2.8

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 (112) hide show
  1. package/README.ja.md +3 -1
  2. package/README.ko.md +4 -0
  3. package/README.md +3 -1
  4. package/README.zh-CN.md +4 -0
  5. package/dist/dsh/agenticreplay-libraries.d.ts +1 -0
  6. package/dist/dsh/agenticreplay-libraries.d.ts.map +1 -1
  7. package/dist/dsh/agenticreplay-libraries.js.map +1 -1
  8. package/dist/dsh/agenticreplay-read-service.d.ts +6 -0
  9. package/dist/dsh/agenticreplay-read-service.d.ts.map +1 -1
  10. package/dist/dsh/agenticreplay-read-service.js +10 -0
  11. package/dist/dsh/agenticreplay-read-service.js.map +1 -1
  12. package/dist/dsh/agenticreplay-recorder.d.ts +19 -12
  13. package/dist/dsh/agenticreplay-recorder.d.ts.map +1 -1
  14. package/dist/dsh/agenticreplay-recorder.js +41 -12
  15. package/dist/dsh/agenticreplay-recorder.js.map +1 -1
  16. package/dist/dsh/agenticreplay-security.d.ts +3 -0
  17. package/dist/dsh/agenticreplay-security.d.ts.map +1 -1
  18. package/dist/dsh/agenticreplay-security.js +144 -7
  19. package/dist/dsh/agenticreplay-security.js.map +1 -1
  20. package/dist/dsh/agenticreplay-status-presentation.d.ts.map +1 -1
  21. package/dist/dsh/agenticreplay-status-presentation.js +3 -1
  22. package/dist/dsh/agenticreplay-status-presentation.js.map +1 -1
  23. package/dist/dsh/coding-workflow/intent.d.ts.map +1 -1
  24. package/dist/dsh/coding-workflow/intent.js +7 -2
  25. package/dist/dsh/coding-workflow/intent.js.map +1 -1
  26. package/dist/dsh/coding-workflow/store.d.ts +22 -0
  27. package/dist/dsh/coding-workflow/store.d.ts.map +1 -1
  28. package/dist/dsh/coding-workflow/store.js +51 -0
  29. package/dist/dsh/coding-workflow/store.js.map +1 -1
  30. package/dist/dsh/core/host.d.ts.map +1 -1
  31. package/dist/dsh/core/host.js +8 -1
  32. package/dist/dsh/core/host.js.map +1 -1
  33. package/dist/dsh/decisions/request-intent.d.ts +14 -1
  34. package/dist/dsh/decisions/request-intent.d.ts.map +1 -1
  35. package/dist/dsh/decisions/request-intent.js +28 -6
  36. package/dist/dsh/decisions/request-intent.js.map +1 -1
  37. package/dist/dsh/host-adapter/lifecycle.d.ts +1 -0
  38. package/dist/dsh/host-adapter/lifecycle.d.ts.map +1 -1
  39. package/dist/dsh/host-adapter/lifecycle.js +18 -2
  40. package/dist/dsh/host-adapter/lifecycle.js.map +1 -1
  41. package/dist/dsh/host-adapter.d.ts.map +1 -1
  42. package/dist/dsh/host-adapter.js +10 -0
  43. package/dist/dsh/host-adapter.js.map +1 -1
  44. package/dist/dsh/index.d.ts +2 -0
  45. package/dist/dsh/index.d.ts.map +1 -1
  46. package/dist/dsh/index.js +2 -0
  47. package/dist/dsh/index.js.map +1 -1
  48. package/dist/dsh/lifecycle-memory.d.ts +65 -0
  49. package/dist/dsh/lifecycle-memory.d.ts.map +1 -0
  50. package/dist/dsh/lifecycle-memory.js +502 -0
  51. package/dist/dsh/lifecycle-memory.js.map +1 -0
  52. package/dist/dsh/models/vendor/opencode-codec.d.ts.map +1 -1
  53. package/dist/dsh/models/vendor/opencode-codec.js +71 -0
  54. package/dist/dsh/models/vendor/opencode-codec.js.map +1 -1
  55. package/dist/dsh/node-tap-summary.d.ts +1 -2
  56. package/dist/dsh/node-tap-summary.d.ts.map +1 -1
  57. package/dist/dsh/node-tap-summary.js +2 -24
  58. package/dist/dsh/node-tap-summary.js.map +1 -1
  59. package/dist/dsh/observation-pack/policy.d.ts +1 -0
  60. package/dist/dsh/observation-pack/policy.d.ts.map +1 -1
  61. package/dist/dsh/observation-pack/policy.js +3 -0
  62. package/dist/dsh/observation-pack/policy.js.map +1 -1
  63. package/dist/dsh/observation-pack/service.d.ts.map +1 -1
  64. package/dist/dsh/observation-pack/service.js +3 -1
  65. package/dist/dsh/observation-pack/service.js.map +1 -1
  66. package/dist/dsh/on-demand-intake.d.ts +5 -0
  67. package/dist/dsh/on-demand-intake.d.ts.map +1 -1
  68. package/dist/dsh/skill-prompts.json +1 -1
  69. package/dist/index.js +2 -0
  70. package/dist/locale/en.json +1 -1
  71. package/dist/locale/ja.json +1 -1
  72. package/dist/locale/ko.json +1 -1
  73. package/dist/locale/zh-CN.json +1 -1
  74. package/dist/memory/application.js +1 -1
  75. package/dist/memory/application.js.map +1 -1
  76. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  77. package/dist/memory/hybrid-retrieval.js +3 -0
  78. package/dist/memory/hybrid-retrieval.js.map +1 -1
  79. package/dist/memory/lifecycle-cache.d.ts +12 -0
  80. package/dist/memory/lifecycle-cache.d.ts.map +1 -0
  81. package/dist/memory/lifecycle-cache.js +36 -0
  82. package/dist/memory/lifecycle-cache.js.map +1 -0
  83. package/dist/memory/lifecycle-database.d.ts +5 -0
  84. package/dist/memory/lifecycle-database.d.ts.map +1 -0
  85. package/dist/memory/lifecycle-database.js +32 -0
  86. package/dist/memory/lifecycle-database.js.map +1 -0
  87. package/dist/memory/lifecycle-global-state.d.ts +5 -0
  88. package/dist/memory/lifecycle-global-state.d.ts.map +1 -0
  89. package/dist/memory/lifecycle-global-state.js +23 -0
  90. package/dist/memory/lifecycle-global-state.js.map +1 -0
  91. package/dist/memory/lifecycle-global.d.ts +23 -0
  92. package/dist/memory/lifecycle-global.d.ts.map +1 -0
  93. package/dist/memory/lifecycle-global.js +56 -0
  94. package/dist/memory/lifecycle-global.js.map +1 -0
  95. package/dist/memory/lifecycle.d.ts +152 -0
  96. package/dist/memory/lifecycle.d.ts.map +1 -0
  97. package/dist/memory/lifecycle.js +227 -0
  98. package/dist/memory/lifecycle.js.map +1 -0
  99. package/dist/model-tools/contracts.d.ts +2 -2
  100. package/docs/agenticreplay-recording.md +1 -1
  101. package/docs/lifecycle-memory.md +25 -0
  102. package/docs/owned-execution.md +3 -3
  103. package/docs/semantic-compaction.md +2 -0
  104. package/docs/verification.md +112 -0
  105. package/migrations/038_coding_admission.sql +19 -0
  106. package/migrations/039_memory_lifecycle.sql +336 -0
  107. package/package.json +7 -3
  108. package/scripts/evaluate-answer-review.mjs +3 -0
  109. package/scripts/verification-completion.mjs +12 -0
  110. package/scripts/verify-lisp-vendor.mjs +3 -0
  111. package/skills/coding-ideal-routine-skill/SKILL.md +12 -0
  112. package/skills/one-shot-software-completion/SKILL.md +13 -0
@@ -0,0 +1,152 @@
1
+ import { type GlobalPrinciple } from './lifecycle-global.js';
2
+ import { z } from 'zod';
3
+ import type { SqliteDatabase } from '../db/adapter.js';
4
+ export declare const MemoryObservation: z.ZodObject<{
5
+ cwd: z.ZodString;
6
+ eventId: z.ZodString;
7
+ sessionId: z.ZodString;
8
+ kind: z.ZodEnum<{
9
+ completion: "completion";
10
+ compaction: "compaction";
11
+ praise: "praise";
12
+ model_switch: "model_switch";
13
+ complaint: "complaint";
14
+ }>;
15
+ summary: z.ZodOptional<z.ZodString>;
16
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
17
+ outcome: z.ZodDefault<z.ZodEnum<{
18
+ unknown: "unknown";
19
+ passed: "passed";
20
+ failed: "failed";
21
+ }>>;
22
+ verification: z.ZodDefault<z.ZodEnum<{
23
+ unknown: "unknown";
24
+ passed: "passed";
25
+ failed: "failed";
26
+ }>>;
27
+ actions: z.ZodDefault<z.ZodArray<z.ZodObject<{
28
+ kind: z.ZodEnum<{
29
+ build: "build";
30
+ edit: "edit";
31
+ test: "test";
32
+ other: "other";
33
+ inspect: "inspect";
34
+ explain: "explain";
35
+ recover: "recover";
36
+ }>;
37
+ outcome: z.ZodEnum<{
38
+ unknown: "unknown";
39
+ passed: "passed";
40
+ failed: "failed";
41
+ }>;
42
+ summary: z.ZodString;
43
+ }, z.core.$strict>>>;
44
+ source: z.ZodObject<{
45
+ producer: z.ZodString;
46
+ runId: z.ZodString;
47
+ eventIds: z.ZodArray<z.ZodString>;
48
+ revision: z.ZodDefault<z.ZodNumber>;
49
+ tombstone: z.ZodDefault<z.ZodBoolean>;
50
+ }, z.core.$strict>;
51
+ issue: z.ZodOptional<z.ZodString>;
52
+ prevention: z.ZodOptional<z.ZodString>;
53
+ fromModel: z.ZodOptional<z.ZodString>;
54
+ toModel: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strict>;
56
+ export type MemoryObservationInput = z.input<typeof MemoryObservation>;
57
+ export type Observation = Omit<z.infer<typeof MemoryObservation>, 'summary'> & {
58
+ summary: string;
59
+ };
60
+ export interface ObservationVersion {
61
+ sourceKey?: string;
62
+ revision?: number;
63
+ tombstone?: boolean;
64
+ hostVerified?: boolean;
65
+ }
66
+ export interface MemorySource {
67
+ producer: string;
68
+ eventId: string;
69
+ runId: string;
70
+ eventIds: string[];
71
+ sourceKey: string;
72
+ revision: number;
73
+ digest: string;
74
+ verification: Observation['verification'];
75
+ verificationSource: 'host_receipt' | 'producer_assertion';
76
+ }
77
+ export interface RoutineCandidate {
78
+ id: string;
79
+ kind: 'caution' | 'procedure';
80
+ summary: string;
81
+ tags: string[];
82
+ verification: Observation['verification'];
83
+ confidence: number;
84
+ candidate: true;
85
+ active: boolean;
86
+ sources: MemorySource[];
87
+ }
88
+ export interface MemoryContext {
89
+ schemaVersion: 1;
90
+ workspace: string;
91
+ cautions: RoutineCandidate[];
92
+ successfulProcedures: RoutineCandidate[];
93
+ recentHistory: {
94
+ kind: Observation['kind'];
95
+ summary: string;
96
+ actions: Observation['actions'];
97
+ source: MemorySource;
98
+ }[];
99
+ continuation: {
100
+ kind: Observation['kind'];
101
+ summary: string;
102
+ actions: Observation['actions'];
103
+ source: MemorySource;
104
+ }[];
105
+ sourceRefs: MemorySource[];
106
+ workMayContinue: true;
107
+ diagnostics: string[];
108
+ available: boolean;
109
+ entries: {
110
+ entryId: string;
111
+ revision: number;
112
+ summary: string;
113
+ tags: string[];
114
+ confidence: number;
115
+ verification: Observation['verification'];
116
+ verificationProvenance: string;
117
+ sourceEventIds: string[];
118
+ scope: 'project' | 'global';
119
+ untrusted: true;
120
+ }[];
121
+ globalPrinciples: GlobalPrinciple[];
122
+ handoff: null | {
123
+ sessionId: string;
124
+ expiresAt: string;
125
+ observations: MemoryContext['continuation'];
126
+ };
127
+ warnings: string[];
128
+ }
129
+ /** Producer assertions stay assertions. Only a host-bound check can set hostVerified. */
130
+ export declare function observeMemory(db: SqliteDatabase, workspace: string, input: unknown, version?: ObservationVersion): {
131
+ accepted: boolean;
132
+ recorded: boolean;
133
+ duplicate: boolean;
134
+ workMayContinue: true;
135
+ diagnostics: string[];
136
+ };
137
+ /** Deterministic bounded extraction, including untrusted portable Global candidates. */
138
+ export declare function improveMemory(db: SqliteDatabase, workspace: string, limit?: number): {
139
+ accepted: boolean;
140
+ recorded: boolean;
141
+ workMayContinue: true;
142
+ changed: number;
143
+ skipped: boolean;
144
+ diagnostics: string[];
145
+ };
146
+ export declare function memoryContext(db: SqliteDatabase, workspace: string, input?: {
147
+ query?: string | undefined;
148
+ tags?: readonly string[] | undefined;
149
+ sessionId?: string | undefined;
150
+ limit?: number | undefined;
151
+ }): MemoryContext;
152
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { contextStamp, cachedContext, saveContext } from './lifecycle-cache.js';
2
+ import { projectGlobalPrinciples, globalPrinciples } from './lifecycle-global.js';
3
+ import { z } from 'zod';
4
+ import { withOptionalMemoryAccess, withOptionalMemoryTransaction } from './lifecycle-database.js';
5
+ import { canonicalContentHash } from '../serialization/validate.js';
6
+ import { capturePolicy } from './capture-policy.js';
7
+ import { findSecretInValue } from './secrets.js';
8
+ const identity = z.string().min(1).max(256).regex(/^[^\p{Cc}\p{Cf}]+$/u);
9
+ const text = z.string().trim().min(1).max(2048);
10
+ const outcome = z.enum(['passed', 'failed', 'unknown']);
11
+ export const MemoryObservation = z.object({
12
+ cwd: z.string().min(1), eventId: identity, sessionId: identity,
13
+ kind: z.enum(['compaction', 'completion', 'model_switch', 'complaint', 'praise']), summary: text.optional(),
14
+ tags: z.array(z.string().trim().min(1).max(80)).max(16).default([]),
15
+ outcome: outcome.default('unknown'), verification: outcome.default('unknown'),
16
+ actions: z.array(z.object({ kind: z.enum(['inspect', 'edit', 'build', 'test', 'recover', 'explain', 'other']),
17
+ outcome, summary: z.string().trim().min(1).max(512) }).strict()).max(32).default([]),
18
+ source: z.object({ producer: identity, runId: identity, eventIds: z.array(identity).min(1).max(32), revision: z.number().int().nonnegative().default(0), tombstone: z.boolean().default(false) }).strict(),
19
+ issue: text.optional(), prevention: text.optional(), fromModel: identity.optional(), toModel: identity.optional(),
20
+ }).strict();
21
+ /** Producer assertions stay assertions. Only a host-bound check can set hostVerified. */
22
+ export function observeMemory(db, workspace, input, version = {}) {
23
+ let accepted = false;
24
+ try {
25
+ const parsed = MemoryObservation.parse(input);
26
+ if (!parsed.summary && !parsed.source.tombstone && !version.tombstone)
27
+ throw new Error('summary_required');
28
+ const value = { ...parsed, summary: parsed.summary ?? 'Observation withdrawn.' };
29
+ if (findSecretInValue(value))
30
+ throw new Error('secret_detected');
31
+ if (withOptionalMemoryAccess(db, () => capturePolicy(db, workspace, value.sessionId)).mode !== 'allowed')
32
+ throw new Error('capture_excluded');
33
+ const sourceKey = identity.parse(version.sourceKey ?? value.eventId), revision = z.number().int().nonnegative().parse(version.revision ?? value.source.revision);
34
+ const tombstone = version.tombstone === true || value.source.tombstone, hostVerified = version.hostVerified === true && value.verification === 'passed';
35
+ value.source.revision = revision;
36
+ value.source.tombstone = tombstone;
37
+ accepted = true;
38
+ const json = JSON.stringify(value), hash = canonicalContentHash({ value, sourceKey, revision, tombstone, hostVerified });
39
+ return withOptionalMemoryTransaction(db, () => {
40
+ if (capturePolicy(db, workspace, value.sessionId).mode !== 'allowed')
41
+ throw new Error('capture_excluded');
42
+ const current = db.prepare('SELECT MAX(source_revision) AS revision FROM dsh_memory_observations WHERE workspace=? AND producer=? AND source_key=?').get(workspace, value.source.producer, sourceKey);
43
+ if (current?.revision !== null && current?.revision !== undefined && revision < current.revision)
44
+ throw new Error('stale_revision');
45
+ const old = db.prepare('SELECT content_hash FROM dsh_memory_observations WHERE workspace=? AND producer=? AND ((event_id=? AND source_revision=?) OR (source_key=? AND source_revision=?))')
46
+ .all(workspace, value.source.producer, value.eventId, revision, sourceKey, revision);
47
+ if (old.length) {
48
+ if (old.some(row => row.content_hash !== hash))
49
+ throw new Error('source_conflict');
50
+ return { accepted: true, recorded: true, duplicate: true, workMayContinue: true, diagnostics: [] };
51
+ }
52
+ db.prepare('INSERT INTO dsh_memory_observations VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspace, value.source.producer, value.eventId, value.sessionId, sourceKey, revision, Number(tombstone), Number(hostVerified), json, hash, new Date().toISOString());
53
+ return { accepted: true, recorded: true, duplicate: false, workMayContinue: true, diagnostics: [] };
54
+ });
55
+ }
56
+ catch (error) {
57
+ const message = error instanceof Error ? error.message : 'memory_unavailable';
58
+ return { accepted: accepted && !['source_conflict', 'capture_excluded', 'stale_revision'].includes(message), recorded: false, duplicate: false, workMayContinue: true, diagnostics: [message.slice(0, 160)] };
59
+ }
60
+ }
61
+ function latest(db, workspace) {
62
+ const rows = db.prepare(`SELECT o.* FROM dsh_memory_observations o WHERE o.workspace=? AND NOT EXISTS
63
+ (SELECT 1 FROM dsh_memory_observations n WHERE n.workspace=o.workspace AND n.producer=o.producer AND n.source_key=o.source_key AND n.source_revision>o.source_revision)
64
+ ORDER BY o.created_at DESC,o.event_id DESC LIMIT 512`).all(workspace);
65
+ const seen = new Set(rows.map(row => `${row.producer}:${row.source_key}`));
66
+ const cached = db.prepare(`SELECT r.candidate_json FROM dsh_memory_routine_revisions r WHERE r.workspace=? AND NOT EXISTS
67
+ (SELECT 1 FROM dsh_memory_routine_revisions n WHERE n.workspace=r.workspace AND n.candidate_id=r.candidate_id AND n.revision>r.revision)
68
+ ORDER BY r.created_at DESC LIMIT 128`).all(workspace);
69
+ for (const old of cached) {
70
+ const candidate = JSON.parse(old.candidate_json);
71
+ if (!candidate.active)
72
+ continue;
73
+ for (const ref of candidate.sources) {
74
+ const key = `${ref.producer}:${ref.sourceKey}`;
75
+ if (seen.has(key) || rows.length >= 1024)
76
+ continue;
77
+ const row = db.prepare('SELECT * FROM dsh_memory_observations WHERE workspace=? AND producer=? AND source_key=? ORDER BY source_revision DESC LIMIT 1').get(workspace, ref.producer, ref.sourceKey);
78
+ if (row) {
79
+ rows.push(row);
80
+ seen.add(key);
81
+ }
82
+ }
83
+ }
84
+ return rows.map(row => {
85
+ const parsed = MemoryObservation.parse(JSON.parse(row.observation_json)), value = { ...parsed, summary: parsed.summary ?? 'Observation withdrawn.' };
86
+ if (canonicalContentHash({ value, sourceKey: row.source_key, revision: row.source_revision, tombstone: row.tombstone === 1, hostVerified: row.host_verified === 1 }) !== row.content_hash)
87
+ throw new Error('memory_integrity_error');
88
+ const source = { producer: row.producer, eventId: row.event_id, runId: value.source.runId, eventIds: value.source.eventIds,
89
+ sourceKey: row.source_key, revision: row.source_revision, digest: row.content_hash, verification: value.verification, verificationSource: row.host_verified === 1 ? 'host_receipt' : 'producer_assertion' };
90
+ return { value, source, hostVerified: row.host_verified === 1, tombstone: row.tombstone === 1 || capturePolicy(db, workspace, value.sessionId).mode !== 'allowed', createdAt: row.created_at };
91
+ });
92
+ }
93
+ function sourceCurrent(sources, current) {
94
+ return sources.length > 0 && sources.every(ref => current.some(row => !row.tombstone && row.source.producer === ref.producer && row.source.sourceKey === ref.sourceKey && row.source.digest === ref.digest));
95
+ }
96
+ function signature(row) { return canonicalContentHash(row.value.actions.filter(a => a.kind !== 'explain').map(a => ({ kind: a.kind, summary: a.summary }))); }
97
+ function derive(rows) {
98
+ const active = rows.filter(row => !row.tombstone), candidates = [];
99
+ for (const row of active.filter(row => ['complaint', 'praise'].includes(row.value.kind))) {
100
+ const caution = row.value.kind === 'complaint';
101
+ candidates.push({ id: `feedback:${canonicalContentHash([row.source.producer, row.source.sourceKey])}`, kind: caution ? 'caution' : 'procedure',
102
+ summary: [row.value.issue ?? row.value.summary, row.value.prevention ?? (caution ? 'A source-backed correction and verification are still required before reusing this result.' : 'Human praise is a candidate signal; it does not establish verification.')].join('\n'),
103
+ tags: row.value.tags, verification: row.hostVerified ? 'passed' : 'unknown', confidence: row.hostVerified ? 0.7 : 0.3, candidate: true, active: true, sources: [row.source] });
104
+ }
105
+ const groups = new Map();
106
+ for (const row of active.filter(row => row.value.kind === 'completion' && row.value.outcome !== 'failed' && !row.value.tags.some(tag => ['status:cancelled', 'status:interrupted'].includes(tag)) && row.value.actions.length)) {
107
+ const key = signature(row), group = groups.get(key) ?? [];
108
+ group.push(row);
109
+ groups.set(key, group);
110
+ }
111
+ for (const [key, group] of groups) {
112
+ const independent = [...new Map(group.map(row => [row.value.source.runId, row])).values()];
113
+ if (independent.length < 2)
114
+ continue;
115
+ const counterexamples = active.filter(row => (row.value.kind === 'complaint' || row.value.kind === 'completion' && row.value.outcome === 'failed') && row.value.actions.length && signature(row) === key);
116
+ const verified = independent.filter(row => row.hostVerified && row.value.outcome === 'passed').length;
117
+ candidates.push({ id: `procedure:${key}`, kind: 'procedure', summary: `Repeated recorded procedure (${independent.length} independent runs):\n${independent[0].value.actions.map(a => `${a.kind}: ${a.summary}`).join('\n')}`,
118
+ tags: [...new Set(independent.flatMap(row => row.value.tags))].slice(0, 16), verification: verified >= 2 && !counterexamples.length ? 'passed' : 'unknown',
119
+ confidence: counterexamples.length ? 0.2 : verified >= 2 ? 0.75 : 0.3, candidate: true, active: true, sources: [...independent, ...counterexamples].map(row => row.source) });
120
+ }
121
+ return candidates.slice(0, 128);
122
+ }
123
+ /** Deterministic bounded extraction, including untrusted portable Global candidates. */
124
+ export function improveMemory(db, workspace, limit = 32) {
125
+ const batchLimit = Math.max(1, Math.min(128, limit));
126
+ const state = () => db.prepare('SELECT source_revision,processed_revision,processed_limit FROM dsh_memory_processing_state WHERE workspace=?')
127
+ .get(workspace) ?? { source_revision: 0, processed_revision: -1, processed_limit: 0 };
128
+ const clean = (head) => head.processed_revision === head.source_revision && head.processed_limit >= batchLimit;
129
+ const skipped = () => ({ accepted: true, recorded: true, workMayContinue: true, changed: 0, skipped: true, diagnostics: [] });
130
+ try {
131
+ if (withOptionalMemoryAccess(db, () => clean(state())))
132
+ return skipped();
133
+ return withOptionalMemoryTransaction(db, () => {
134
+ const head = state();
135
+ if (clean(head))
136
+ return skipped();
137
+ const current = latest(db, workspace), candidates = derive(current).slice(0, batchLimit), seen = new Set(candidates.map(c => c.id));
138
+ const old = db.prepare(`SELECT r.* FROM dsh_memory_routine_revisions r WHERE r.workspace=? AND NOT EXISTS
139
+ (SELECT 1 FROM dsh_memory_routine_revisions n WHERE n.workspace=r.workspace AND n.candidate_id=r.candidate_id AND n.revision>r.revision) ORDER BY r.created_at DESC LIMIT 256`)
140
+ .all(workspace);
141
+ for (const row of old) {
142
+ if (!seen.has(row.candidate_id) && !sourceCurrent(JSON.parse(row.candidate_json).sources, current))
143
+ candidates.push({ ...JSON.parse(row.candidate_json), active: false, sources: [] });
144
+ }
145
+ let changed = 0;
146
+ for (const candidate of candidates) {
147
+ const hash = canonicalContentHash(candidate), before = old.find(row => row.candidate_id === candidate.id);
148
+ if (before?.content_hash === hash)
149
+ continue;
150
+ db.prepare('INSERT INTO dsh_memory_routine_revisions VALUES(?,?,?,?,?,?)').run(workspace, candidate.id, (before?.revision ?? 0) + 1, JSON.stringify(candidate), hash, new Date().toISOString());
151
+ changed++;
152
+ }
153
+ projectGlobalPrinciples(db, workspace, candidates);
154
+ // Only successful extraction + Global projection commit the watermark.
155
+ db.prepare(`INSERT INTO dsh_memory_processing_state(workspace,processed_revision,processed_limit) VALUES(?,?,?)
156
+ ON CONFLICT(workspace) DO UPDATE SET processed_revision=excluded.processed_revision,processed_limit=excluded.processed_limit`)
157
+ .run(workspace, head.source_revision, batchLimit);
158
+ return { accepted: true, recorded: true, workMayContinue: true, changed, skipped: false, diagnostics: [] };
159
+ });
160
+ }
161
+ catch {
162
+ return { accepted: false, recorded: false, workMayContinue: true, changed: 0, skipped: false, diagnostics: ['memory_unavailable'] };
163
+ }
164
+ }
165
+ export function memoryContext(db, workspace, input = {}) {
166
+ const empty = { schemaVersion: 1, workspace, cautions: [], successfulProcedures: [], recentHistory: [], continuation: [], sourceRefs: [], workMayContinue: true, diagnostics: [], available: true, entries: [], globalPrinciples: [], handoff: null, warnings: [] };
167
+ try {
168
+ return withOptionalMemoryTransaction(db, () => {
169
+ if (input.sessionId && capturePolicy(db, workspace, input.sessionId).mode !== 'allowed')
170
+ return { ...empty, diagnostics: ['capture_excluded'] };
171
+ const now = Date.now(), key = JSON.stringify([workspace, input.sessionId ?? null, input.query ?? '', input.tags ?? [], input.limit ?? 5]), stamp = contextStamp(db, workspace);
172
+ const reused = cachedContext(db, key, stamp, now);
173
+ if (reused)
174
+ return reused;
175
+ const rows = latest(db, workspace), limit = Math.max(1, Math.min(16, input.limit ?? 5)), words = (input.query ?? '').toLocaleLowerCase().split(/\s+/u).filter(Boolean).slice(0, 12), tags = input.tags ?? [];
176
+ const match = (summary, itemTags) => tags.every(tag => itemTags.includes(tag)) && (!words.length || words.some(word => `${summary} ${itemTags.join(' ')}`.toLocaleLowerCase().includes(word)));
177
+ const savedRows = db.prepare(`SELECT r.candidate_json,r.revision FROM dsh_memory_routine_revisions r WHERE r.workspace=? AND NOT EXISTS
178
+ (SELECT 1 FROM dsh_memory_routine_revisions n WHERE n.workspace=r.workspace AND n.candidate_id=r.candidate_id AND n.revision>r.revision) ORDER BY r.created_at DESC LIMIT 128`)
179
+ .all(workspace);
180
+ const revisions = new Map(savedRows.map(row => [JSON.parse(row.candidate_json).id, row.revision]));
181
+ const saved = savedRows.map(row => JSON.parse(row.candidate_json));
182
+ const currentCandidates = new Map(derive(rows).map(candidate => [candidate.id, canonicalContentHash(candidate)]));
183
+ const candidates = saved.filter(c => c.active && sourceCurrent(c.sources, rows) && currentCandidates.get(c.id) === canonicalContentHash(c) && match(c.summary, c.tags));
184
+ const continuation = input.sessionId ? rows.filter(row => !row.tombstone && Date.parse(row.createdAt) >= now - 86400000 && row.value.sessionId === input.sessionId && ['model_switch', 'compaction', 'completion'].includes(row.value.kind)).slice(0, limit)
185
+ .map(row => ({ kind: row.value.kind, summary: row.value.summary, actions: row.value.actions, source: row.source })) : [];
186
+ const cautions = candidates.filter(c => c.kind === 'caution').slice(0, limit), successfulProcedures = candidates.filter(c => c.kind === 'procedure').slice(0, limit);
187
+ const recentHistory = rows.filter(row => !row.tombstone && row.value.kind === 'completion' && row.value.sessionId !== input.sessionId && match(row.value.summary, row.value.tags)).slice(0, limit)
188
+ .map(row => ({ kind: row.value.kind, summary: row.value.summary, actions: row.value.actions, source: row.source }));
189
+ const compact = (ref) => ({ ...ref, eventIds: ref.eventIds.slice(0, 8) });
190
+ const projected = { ...empty, globalPrinciples: globalPrinciples(db, input), cautions: cautions.map(c => ({ ...c, summary: c.summary.slice(0, 2048), sources: c.sources.slice(0, 6).map(compact) })),
191
+ successfulProcedures: successfulProcedures.map(c => ({ ...c, summary: c.summary.slice(0, 2048), sources: c.sources.slice(0, 6).map(compact) })),
192
+ continuation: continuation.map(c => ({ ...c, source: compact(c.source) })), recentHistory: recentHistory.map(c => ({ ...c, source: compact(c.source) })) };
193
+ const refs = () => {
194
+ projected.sourceRefs = [...projected.cautions.flatMap(c => c.sources), ...projected.successfulProcedures.flatMap(c => c.sources), ...projected.continuation.map(c => c.source), ...projected.recentHistory.map(c => c.source)].slice(0, 32);
195
+ projected.entries = [...projected.cautions, ...projected.successfulProcedures].map(c => ({ entryId: `lifecycle:${c.id}`, revision: revisions.get(c.id) ?? 1, summary: c.summary, tags: c.tags, confidence: c.confidence,
196
+ verification: c.verification, verificationProvenance: c.sources.every(ref => ref.verificationSource === 'host_receipt') ? 'host_receipt' : 'producer_assertion', sourceEventIds: c.sources.map(ref => ref.eventId), scope: 'project', untrusted: true })).concat(projected.globalPrinciples);
197
+ const dated = rows.filter(row => !row.tombstone && row.value.sessionId === input.sessionId && projected.continuation.some(c => c.source.digest === row.source.digest)).map(row => Date.parse(row.createdAt));
198
+ projected.handoff = input.sessionId && dated.length ? { sessionId: input.sessionId, expiresAt: new Date(Math.max(...dated) + 86400000).toISOString(), observations: projected.continuation } : null;
199
+ projected.warnings = projected.diagnostics;
200
+ };
201
+ refs();
202
+ while (Buffer.byteLength(JSON.stringify(projected)) > 15000) {
203
+ projected.diagnostics = ['context_excerpt_bounded'];
204
+ if (projected.globalPrinciples.length)
205
+ projected.globalPrinciples.pop();
206
+ else if (projected.successfulProcedures.length)
207
+ projected.successfulProcedures.pop();
208
+ else if (projected.recentHistory.length)
209
+ projected.recentHistory.pop();
210
+ else if (projected.continuation.length)
211
+ projected.continuation.pop();
212
+ else if (projected.cautions.length)
213
+ projected.cautions.pop();
214
+ else
215
+ break;
216
+ refs();
217
+ }
218
+ const expirations = rows.filter(row => !row.tombstone && row.value.sessionId === input.sessionId && Date.parse(row.createdAt) + 86400000 > now
219
+ && ['model_switch', 'compaction', 'completion'].includes(row.value.kind)).map(row => Date.parse(row.createdAt) + 86400000);
220
+ return saveContext(db, key, stamp, projected, Math.min(...expirations), now);
221
+ }, true);
222
+ }
223
+ catch {
224
+ return { ...empty, available: false, diagnostics: ['memory_unavailable'], warnings: ['memory_unavailable'] };
225
+ }
226
+ }
227
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -386,10 +386,10 @@ export declare const MODEL_TOOL_CONTRACTS: readonly [{
386
386
  runId: z.ZodString;
387
387
  expectedRevision: z.ZodNumber;
388
388
  idempotencyKey: z.ZodString;
389
- workUnitId: z.ZodString;
390
- orchestrationId: z.ZodOptional<z.ZodString>;
391
389
  resumeToken: z.ZodOptional<z.ZodString>;
392
390
  routeEpoch: z.ZodOptional<z.ZodNumber>;
391
+ workUnitId: z.ZodString;
392
+ orchestrationId: z.ZodOptional<z.ZodString>;
393
393
  leaseToken: z.ZodOptional<z.ZodString>;
394
394
  instruction: z.ZodString;
395
395
  }, z.core.$strict>;
@@ -140,7 +140,7 @@ bypassed by a forced add. Check `git ls-files -- .agenticreplay` for previously
140
140
  tracked captures before pushing; remove them from the index and address any
141
141
  already published sensitive data separately.
142
142
 
143
- `redacted` preserves text after known secret-pattern filtering. It cannot detect
143
+ `redacted` preserves ordinary text after filtering known credential assignments, quoted values (including escaped JSON quotes), authentication headers and URL credentials. There is no raw capture mode. This filtering applies to new recordings; it does not rewrite earlier traces or exports. It cannot detect
144
144
  all arbitrary secrets. `metadata` omits message bodies, arguments and tool result
145
145
  bodies. Neither mode records environment variables, replayState, attachment bytes,
146
146
  raw HTTP, shell frames or raw MCP transport. Reasoning defaults off. Auxiliary
@@ -0,0 +1,25 @@
1
+ # Local lifecycle memory
2
+
3
+ Kiokuko DSH records bounded public observations in its existing configured SQLite database. No HTTP server, extra model call, credential, global installation or external scheduler is required.
4
+
5
+ Both full and core entry points observe explicit model selections, successful compaction summaries, committed task completion, human feedback and native message ratings. Private reasoning blocks and raw compaction output are excluded. Public text passes the existing secret and path redaction policy. Capture refusal prevents further capture and reference delivery for that session.
6
+
7
+ The native tools `memory_observe`, `memory_context` and `memory_improve` use the common memory contract. Supply the absolute repository `cwd`; `memory_context` also accepts `query`, `tags`, `sessionId` and `limit`. Requests outside the configured repository are rejected. Responses always allow work to continue. `recorded` describes persistence; it is separate from input acceptance. Failed recording is never reported as a saved observation.
8
+
9
+ Context includes project cautions, procedure candidates, bounded recent task history, same-session continuation, eligible Global principles/references, source references and diagnostics. Every project reference retains producer, event ID, source revision, content digest and verification provenance; Global references retain entry identity/revision and opaque evidence links. Context is untrusted data; it cannot grant permissions or override the current request, host or OS. The native pre-step re-reads current same-repository cautions and temporary session context on every step, including a new task. Durable candidate sources are checked beyond the recent 512-event window. Retrieval is bounded to 128 candidates and a 15 KB excerpt; it is not an unlimited history dump.
10
+
11
+ Every projected snapshot also tells the model to call `memory_context` with relevant keywords/tags when the procedure is unclear, while following normal task preparation and permission checks. Project candidates and Global references participate in that lookup; Global keyword searches use the existing hybrid retrieval lanes and eligibility gates.
12
+
13
+ Feedback replacements append a source revision. Deletions append a tombstone. Previous revisions remain auditable but no longer support new context. Native pre-steps check persistent memory revisions and reuse the existing snapshot when its data is unchanged and still present in the active context. They do not re-derive history or append duplicate snapshot audit records on unchanged steps. A changed or expired view replaces the previous snapshot; prior-turn memory lookup results are retired when their memory revisions change. A missing snapshot is delivered again after compaction/context loss. The original log remains intact.
14
+
15
+ Context caching is limited to 32 query views per SQLite connection, keyed by workspace, session, query, tags and limit. Observation, evaluation, source-policy and Global content/eligibility revisions invalidate the cache. Continuation expires at the earliest supporting observation's 24-hour deadline, even without a database write. The cache returns independent plain JSON values; model/tool output carries no private cache metadata. Ordinary ledger sequence, recorder and audit traffic does not invalidate memory revisions. A reattached host checks and reuses a matching existing native snapshot.
16
+
17
+ Routine candidates require independently sourced repeated completions. Only fresh host-bound completion evidence establishes verification. Human praise, ordinary task termination and silence do not prove success. Complaints and failed matching executions reduce confidence; withdrawn sources immediately invalidate old candidate projections. Observation boundaries improve candidates immediately. A shared, unreferenced host timer checks for pending source revisions every 60 seconds and stops when the last module owner releases it. A persistent processing watermark skips extraction when those revisions have already been handled; the bounded aggregation window is re-derived only when new input exists or a larger extraction limit is requested. Candidate/Global writes and the watermark commit together. A failed extraction leaves the revision pending for retry, including after a process restart. There is no paid-model improvement pass.
18
+
19
+ Improvement creates untrusted Global principle candidates in the same configured database. These contain fixed portable preventive/verification rules and opaque evidence hashes; project text, commands, paths, personal profiles and raw logs are not copied. They never become verified or adopted automatically. Current-source hashes, capture policy and ordinary memory eligibility gates govern their visibility, including ordinary Global search outside these lifecycle tools.
20
+
21
+ When praise refers to the current public answer or its completed run, the observer resolves exact repository/session/run links to AgenticReplay. With a bound full-host recorder, a completed trace supplies at most 64 events/64 KB of public result metadata; only tool names, result classification and trace event IDs are retained. Payloads, reasoning and blobs are excluded. Unbound, missing, incomplete or refused traces cannot justify verification. Core remains independent of the recorder and retains local public observations and available trace links.
22
+
23
+ Optional memory failure leaves coding available. Context reads have a 50 ms foreground bound; unavailable context is omitted. Optional SQLite operations fail immediately on a writer lock rather than borrowing the normal host's lock wait/retry budget; the host setting is restored before returning. After a terminal run and its pending finalization have committed, cache or worker notification failures cannot prevent owner release. The pending job remains available to the existing startup retry mechanism.
24
+
25
+ The connected surface is the native DSH lifecycle and three native tools. This change does not add a permanent HTTP API or a memory-management UI. It does not modify the running installation/configuration or require an external Kiokuko server.
@@ -51,8 +51,8 @@ be reconstructed from a model's success report. After restart, saved receipts re
51
51
  Register conditions and source/test/configuration paths with `task_completion`
52
52
  before running the check. Memory application reviews may specify a repository-relative `cwd`; omitted values retain the historical repository-root meaning. Actual directory, command, source digest, run and generation must match. Owned shell and Lisp process calls feed the existing
53
53
  completion and memory-application records. Exit zero alone does not establish
54
- test success: complete Node TAP and Cargo harness summaries distinguish passed,
55
- failed, cancelled, ignored/skipped, filtered and zero/incomplete test runs.
54
+ test success: complete Node TAP summaries distinguish passed, failed, cancelled,
55
+ skipped/todo and zero/incomplete test runs.
56
56
  Include every relevant input in the registered source set.
57
57
 
58
58
  Finalization receives structured observations and source-bound checks. Candidate
@@ -84,7 +84,7 @@ plan does not exit it.
84
84
  ```sh
85
85
  npm run typecheck
86
86
  KIOKUKO_REQUIRE_DSH_NATIVE=1 KIOKUKO_DSH_PACKAGE_ROOT="$PWD/tests/fixtures/dsh-runtime/node_modules" node scripts/run-tests.mjs tests/dsh/integration/owned-native-lifecycle.test.ts
87
- KIOKUKO_REQUIRE_CARGO_RUNTIME=1 node scripts/run-tests.mjs tests/dsh/integration/owned-execution.test.ts
87
+ node scripts/run-tests.mjs tests/dsh/integration/owned-execution.test.ts
88
88
  KIOKUKO_REQUIRE_LISP_RUNTIME=1 KIOKUKO_DSH_PACKAGE_ROOT="$PWD/tests/fixtures/dsh-runtime/node_modules" npm run test:lisp
89
89
  npm run build
90
90
  npm run test:skill-delivery
@@ -31,6 +31,8 @@ semanticCompaction:
31
31
 
32
32
  Successful native `read`, `glob`, `grep` and foreground `bash` results containing a single plain text block larger than 10 KiB remain full for two completed native model calls after their result event. Failed attempts and interrupted assistant messages do not count. Before a later request, packing replaces the display with its original byte count, digest, stable session-bound handle and complete head/tail lines totaling at most 1 KiB. The envelope adds metadata beyond that excerpt budget. ObservationPack makes no Jev call.
33
33
 
34
+ If no complete source line fits that excerpt, the result stays full: no new pack or automatic read-back is created. Existing v1 packs with empty excerpts remain readable and can still be restored. This preserves source material rather than promising savings for oversized single lines.
35
+
34
36
  Failures, unknown success, background execution, Lisp and execution-control results are excluded. Bash additionally requires a captured structured foreground exit status of zero, without interruption or sandbox failure, and an exact match to the logged presentation. `isError: false` alone is insufficient. After reload, Bash results without that live proof remain untouched.
35
37
 
36
38
  The auxiliary native tool is separate from Enno business operations: