engineering-memory 1.11.19 → 1.11.21

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 (31) hide show
  1. package/bin/engineering-memory.mjs +14 -24
  2. package/install/localization.generated.mjs +18 -0
  3. package/package.json +1 -1
  4. package/runtime/build.json +1 -1
  5. package/runtime/dist/src/auth/browser-auth.js +15 -4
  6. package/runtime/dist/src/config.js +1 -0
  7. package/runtime/dist/src/git/git-inspector.js +10 -0
  8. package/runtime/dist/src/localization/catalogue.generated.js +786 -0
  9. package/runtime/dist/src/mcp/delivery-tools.js +15 -48
  10. package/runtime/dist/src/mcp/onboarding-tools.js +289 -618
  11. package/runtime/dist/src/mcp/questionnaire-tools.js +25 -26
  12. package/runtime/dist/src/mcp/status-meaning-tools.js +12 -86
  13. package/runtime/dist/src/mcp/status-remap-tools.js +252 -0
  14. package/runtime/dist/src/mcp/tool-annotations.js +1 -0
  15. package/runtime/dist/src/mcp/tool-definitions.js +33 -55
  16. package/runtime/dist/src/mcp/workflow-tools.js +17 -108
  17. package/runtime/dist/src/mcp/worktree-tools.js +168 -250
  18. package/runtime/dist/src/runtime/api-client.js +8 -2
  19. package/runtime/dist/src/runtime/bridge-service.js +100 -94
  20. package/runtime/dist/src/runtime/create-bridge-service.js +4 -2
  21. package/runtime/dist/src/runtime/language-store.js +6 -0
  22. package/runtime/dist/src/runtime/release-notes.js +9 -7
  23. package/runtime/dist/src/runtime/release-report.js +30 -30
  24. package/runtime/dist/src/runtime/task-start.js +75 -73
  25. package/runtime/dist/src/runtime/texts.js +135 -0
  26. package/runtime/dist/src/runtime/worktree-pool.js +30 -5
  27. package/runtime/dist/src/runtime/worktree-preparation.js +3 -2
  28. package/runtime/dist/src/utilities/process.js +7 -0
  29. package/skill/references/lifecycle.md +21 -3
  30. package/skill/references/project-onboarding.md +5 -2
  31. package/skill/references/questionnaires.md +5 -1
@@ -1,8 +1,12 @@
1
1
  import * as z from 'zod/v4';
2
2
  import { languageTag } from '../runtime/questionnaire-store.js';
3
+ import { texts } from '../runtime/texts.js';
3
4
  import { sha256, stableStringify } from '../utilities/hash.js';
4
5
  import { answerChoice, answerData, askQuestionnaire } from './questionnaire-tools.js';
5
- const option = z.tuple([z.string().trim().min(1).max(100), z.string().trim().min(1).max(240)]);
6
+ const option = z.strictObject({
7
+ label: z.string().trim().min(1).max(100),
8
+ description: z.string().trim().min(1).max(240),
9
+ });
6
10
  const copySchema = z.strictObject({
7
11
  message: z.string().trim().min(1).max(240),
8
12
  context: z.string().trim().min(1).max(500),
@@ -18,47 +22,6 @@ const copySchema = z.strictObject({
18
22
  baseTitle: z.string().trim().min(1).max(100),
19
23
  baseWrite: option,
20
24
  });
21
- const copies = {
22
- tr: {
23
- message: 'Değişiklikleri nasıl teslim edelim?',
24
- context: 'Görev doğrulandı ve kapandı. Bu seçim kodun nereye gönderileceğini belirler; hafıza değişikliklerini yayımlama onayı bunun yerine geçmez.',
25
- example: 'Commit yerel dalda kalır. PR/MR seçersen değişiklikler uzak dala gönderilir ve ekip incelemesine açılır.',
26
- destination: 'Dal / uzak depo',
27
- commit: ['Yalnızca commit', 'Değişiklikleri bu yerel dalda kaydet.'],
28
- commit_push: ['Commit ve push', 'Bu dalı belirtilen uzak depoya gönder.'],
29
- commit_push_draft_pr: [
30
- 'Commit, push ve taslak PR/MR',
31
- 'Dalı gönder; henüz incelemeye hazır olmayan bir taslak aç.',
32
- ],
33
- commit_push_pr: ['Commit, push ve PR/MR', 'Dalı gönder ve incelemeye hazır bir istek aç.'],
34
- defer: ['Şimdilik beklet', 'Görev kapalı kalır; dosyalar korunur, Git teslimi yapılmaz.'],
35
- baseMessage: 'PR/MR hangi dala açılsın?',
36
- baseContext: 'Hedef dalı açıkça belirt. Depodaki varsayılan dalı kendiliğimizden seçmeyiz.',
37
- baseTitle: 'Hedef dal',
38
- baseWrite: ['Bu dala aç', 'Yazdığın dalı hedef al; birleştirme ayrı bir karardır.'],
39
- },
40
- en: {
41
- message: 'How should we deliver these changes?',
42
- context: 'The task is verified and closed. This choice determines where the code goes; approval to publish memory does not authorize Git delivery.',
43
- example: 'Commit keeps work on the local branch. PR/MR pushes that branch and opens it for team review.',
44
- destination: 'Branch / remote repository',
45
- commit: ['Commit only', 'Save the changes on this local branch.'],
46
- commit_push: ['Commit and push', 'Push this branch to the named remote repository.'],
47
- commit_push_draft_pr: [
48
- 'Commit, push and draft PR/MR',
49
- 'Push the branch and open a draft that is not ready for review.',
50
- ],
51
- commit_push_pr: [
52
- 'Commit, push and PR/MR',
53
- 'Push the branch and open a request ready for review.',
54
- ],
55
- defer: ['Keep it for now', 'Keep the task closed and preserve its files without Git delivery.'],
56
- baseMessage: 'Which branch should the PR/MR target?',
57
- baseContext: 'Specify the target branch explicitly. The remote default is not selected automatically.',
58
- baseTitle: 'Target branch',
59
- baseWrite: ['Use this branch', 'Target the branch you enter; merging is a separate decision.'],
60
- },
61
- };
62
25
  const closedSchema = z.object({
63
26
  closed: z.literal(true),
64
27
  taskVersion: z.number().int().positive(),
@@ -79,7 +42,7 @@ const closedSchema = z.object({
79
42
  });
80
43
  export function registerDeliveryTools(server, service) {
81
44
  server.registerTool('task.close', {
82
- description: 'Close the verified task, then open its durable mode-governed Git delivery selector in the same call. Memory publication is separate. Cancellation/feedback leave delivery pending; retry identical input to resume. PR/MR is one review-request concept, not an instruction to merge. No Git action is performed by this tool. Read-only tasks need no delivery. Use complete copy outside Turkish/English. If the user already explicitly chose Git delivery in their own message, deliveryInstruction preserves that choice with its exact relevant excerpt; it is an agent-reported instruction, never a native answer or a substitute for missing user consent. Do not use it for agent decisions or memory-publication approval.',
45
+ description: 'Close the verified task, then open its durable mode-governed Git delivery selector in the same call. Memory publication is separate. Cancellation/feedback leave delivery pending; retry identical input to resume. PR/MR is one review-request concept, not an instruction to merge. No Git action is performed by this tool. Read-only tasks need no delivery. Supply complete copy when the product text catalogue lacks the conversation language. If the user already explicitly chose Git delivery in their own message, deliveryInstruction preserves that choice with its exact relevant excerpt; it is an agent-reported instruction, never a native answer or a substitute for missing user consent. Do not use it for agent decisions or memory-publication approval.',
83
46
  inputSchema: z.object({
84
47
  repoRoot: z.string().min(1).optional(),
85
48
  taskId: z.string().min(1),
@@ -103,8 +66,8 @@ export function registerDeliveryTools(server, service) {
103
66
  }),
104
67
  }, async (input, context) => {
105
68
  const language = await service.language(input.language);
106
- const primary = language?.split('-')[0];
107
- const copy = input.copy ?? (primary === 'tr' || primary === 'en' ? copies[primary] : undefined);
69
+ const copy = input.copy ??
70
+ (language ? copySchema.safeParse(texts('delivery', language)).data : undefined);
108
71
  if (!copy)
109
72
  return output({
110
73
  ok: false,
@@ -191,7 +154,11 @@ export function registerDeliveryTools(server, service) {
191
154
  destination.branch +
192
155
  (canPush ? ' → ' + destination.remote + ' (' + destination.pushUrl + ')' : ''),
193
156
  example: copy.example,
194
- options: ids.map((id) => ({ id, label: copy[id][0], description: copy[id][1] })),
157
+ options: ids.map((id) => ({
158
+ id,
159
+ label: copy[id].label,
160
+ description: copy[id].description,
161
+ })),
195
162
  binding,
196
163
  }, context, [], owner);
197
164
  const choice = instruction?.choice ?? (form ? answerChoice(form) : null);
@@ -232,8 +199,8 @@ export function registerDeliveryTools(server, service) {
232
199
  context: copy.baseContext,
233
200
  example: copy.example,
234
201
  options: [
235
- { id: 'write', label: copy.baseWrite[0], description: copy.baseWrite[1] },
236
- { id: 'defer', label: copy.defer[0], description: copy.defer[1] },
202
+ { id: 'write', label: copy.baseWrite.label, description: copy.baseWrite.description },
203
+ { id: 'defer', label: copy.defer.label, description: copy.defer.description },
237
204
  ],
238
205
  textField: { title: copy.baseTitle, maxLength: 240, requiredForChoice: 'write' },
239
206
  binding: { ...binding, choice },