devchain-cli 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/drizzle/0027_legal_malice.sql +17 -0
  2. package/dist/drizzle/0028_populate_provider_configs.sql +19 -0
  3. package/dist/drizzle/0029_merge_profiles_by_family_slug.sql +116 -0
  4. package/dist/drizzle/0030_set_agents_provider_config_id.sql +14 -0
  5. package/dist/drizzle/0031_remove_legacy_profile_columns.sql +68 -0
  6. package/dist/drizzle/0032_agents_provider_config_not_null.sql +52 -0
  7. package/dist/drizzle/0033_profile_provider_configs_name.sql +38 -0
  8. package/dist/drizzle/0034_sessions_agent_running_unique.sql +30 -0
  9. package/dist/drizzle/0035_provider_config_position.sql +26 -0
  10. package/dist/drizzle/PHASE2_MIGRATION_GUIDE.md +109 -0
  11. package/dist/drizzle/meta/0027_snapshot.json +3648 -0
  12. package/dist/drizzle/meta/0035_snapshot.json +3670 -0
  13. package/dist/drizzle/meta/_journal.json +64 -1
  14. package/dist/drizzle/migration-guard.sql +17 -0
  15. package/dist/drizzle/phase2-rollback.sql +44 -0
  16. package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts +101 -12
  17. package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts.map +1 -1
  18. package/dist/node_modules/@devchain/shared/schemas/export-schema.js +20 -0
  19. package/dist/node_modules/@devchain/shared/schemas/export-schema.js.map +1 -1
  20. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  21. package/dist/server/modules/agents/controllers/agents.controller.d.ts +15 -0
  22. package/dist/server/modules/agents/controllers/agents.controller.js +120 -57
  23. package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -1
  24. package/dist/server/modules/core/services/preflight.service.d.ts +6 -0
  25. package/dist/server/modules/core/services/preflight.service.js +143 -57
  26. package/dist/server/modules/core/services/preflight.service.js.map +1 -1
  27. package/dist/server/modules/epics/services/epics.service.d.ts +10 -4
  28. package/dist/server/modules/epics/services/epics.service.js +8 -5
  29. package/dist/server/modules/epics/services/epics.service.js.map +1 -1
  30. package/dist/server/modules/events/catalog/epic.created.d.ts +18 -0
  31. package/dist/server/modules/events/catalog/epic.created.js +8 -0
  32. package/dist/server/modules/events/catalog/epic.created.js.map +1 -1
  33. package/dist/server/modules/events/catalog/epic.updated.d.ts +18 -0
  34. package/dist/server/modules/events/catalog/epic.updated.js +8 -0
  35. package/dist/server/modules/events/catalog/epic.updated.js.map +1 -1
  36. package/dist/server/modules/events/catalog/index.d.ts +36 -0
  37. package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.d.ts +1 -0
  38. package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js +33 -2
  39. package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js.map +1 -1
  40. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js +12 -5
  41. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js.map +1 -1
  42. package/dist/server/modules/mcp/services/mcp.service.js +16 -2
  43. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  44. package/dist/server/modules/mcp/services/terminal-activity.service.d.ts +1 -1
  45. package/dist/server/modules/mcp/services/terminal-activity.service.js +22 -2
  46. package/dist/server/modules/mcp/services/terminal-activity.service.js.map +1 -1
  47. package/dist/server/modules/profiles/controllers/profiles.controller.d.ts +11 -8
  48. package/dist/server/modules/profiles/controllers/profiles.controller.js +88 -14
  49. package/dist/server/modules/profiles/controllers/profiles.controller.js.map +1 -1
  50. package/dist/server/modules/profiles/controllers/provider-configs.controller.d.ts +9 -0
  51. package/dist/server/modules/profiles/controllers/provider-configs.controller.js +94 -0
  52. package/dist/server/modules/profiles/controllers/provider-configs.controller.js.map +1 -0
  53. package/dist/server/modules/profiles/dto.d.ts +81 -6
  54. package/dist/server/modules/profiles/dto.js +45 -3
  55. package/dist/server/modules/profiles/dto.js.map +1 -1
  56. package/dist/server/modules/profiles/profiles.module.js +2 -1
  57. package/dist/server/modules/profiles/profiles.module.js.map +1 -1
  58. package/dist/server/modules/projects/controllers/projects.controller.d.ts +78 -19
  59. package/dist/server/modules/projects/controllers/projects.controller.js +243 -17
  60. package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
  61. package/dist/server/modules/projects/dtos/export.dto.d.ts +44 -0
  62. package/dist/server/modules/projects/dtos/export.dto.js +10 -0
  63. package/dist/server/modules/projects/dtos/export.dto.js.map +1 -1
  64. package/dist/server/modules/projects/services/projects.service.d.ts +48 -11
  65. package/dist/server/modules/projects/services/projects.service.js +359 -27
  66. package/dist/server/modules/projects/services/projects.service.js.map +1 -1
  67. package/dist/server/modules/providers/controllers/providers.controller.js +12 -7
  68. package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
  69. package/dist/server/modules/registry/controllers/templates.controller.d.ts +2 -2
  70. package/dist/server/modules/registry/services/registry-orchestration.service.js +11 -0
  71. package/dist/server/modules/registry/services/registry-orchestration.service.js.map +1 -1
  72. package/dist/server/modules/registry/services/template-upgrade.service.js +6 -0
  73. package/dist/server/modules/registry/services/template-upgrade.service.js.map +1 -1
  74. package/dist/server/modules/registry/services/unified-template.service.d.ts +2 -1
  75. package/dist/server/modules/registry/services/unified-template.service.js +61 -0
  76. package/dist/server/modules/registry/services/unified-template.service.js.map +1 -1
  77. package/dist/server/modules/reviews/services/reviews.service.js +8 -0
  78. package/dist/server/modules/reviews/services/reviews.service.js.map +1 -1
  79. package/dist/server/modules/sessions/services/activity-tracker.service.d.ts +2 -0
  80. package/dist/server/modules/sessions/services/activity-tracker.service.js +20 -0
  81. package/dist/server/modules/sessions/services/activity-tracker.service.js.map +1 -1
  82. package/dist/server/modules/sessions/services/sessions-message-pool.service.js +2 -2
  83. package/dist/server/modules/sessions/services/sessions-message-pool.service.js.map +1 -1
  84. package/dist/server/modules/sessions/services/sessions.service.d.ts +3 -1
  85. package/dist/server/modules/sessions/services/sessions.service.js +275 -144
  86. package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
  87. package/dist/server/modules/sessions/utils/env-builder.d.ts +8 -0
  88. package/dist/server/modules/sessions/utils/env-builder.js +62 -0
  89. package/dist/server/modules/sessions/utils/env-builder.js.map +1 -0
  90. package/dist/server/modules/settings/dtos/settings.dto.d.ts +84 -8
  91. package/dist/server/modules/settings/dtos/settings.dto.js +15 -2
  92. package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
  93. package/dist/server/modules/settings/services/settings.service.d.ts +10 -1
  94. package/dist/server/modules/settings/services/settings.service.js +275 -0
  95. package/dist/server/modules/settings/services/settings.service.js.map +1 -1
  96. package/dist/server/modules/storage/db/db.provider.js +2 -0
  97. package/dist/server/modules/storage/db/db.provider.js.map +1 -1
  98. package/dist/server/modules/storage/db/schema.d.ts +185 -28
  99. package/dist/server/modules/storage/db/schema.js +32 -6
  100. package/dist/server/modules/storage/db/schema.js.map +1 -1
  101. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +17 -1
  102. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  103. package/dist/server/modules/storage/local/local-storage.service.d.ts +15 -1
  104. package/dist/server/modules/storage/local/local-storage.service.js +352 -21
  105. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  106. package/dist/server/modules/storage/models/domain.models.d.ts +26 -7
  107. package/dist/server/modules/subscribers/actions/restart-agent.action.js +17 -19
  108. package/dist/server/modules/subscribers/actions/restart-agent.action.js.map +1 -1
  109. package/dist/server/modules/subscribers/events/event-fields-catalog.js +4 -0
  110. package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -1
  111. package/dist/server/modules/terminal/services/pty.service.js +6 -1
  112. package/dist/server/modules/terminal/services/pty.service.js.map +1 -1
  113. package/dist/server/modules/watchers/services/watcher-runner.service.js +27 -8
  114. package/dist/server/modules/watchers/services/watcher-runner.service.js.map +1 -1
  115. package/dist/{templates/claude-opus.json → server/templates/dev-loop.json} +365 -209
  116. package/dist/server/tsconfig.tsbuildinfo +1 -1
  117. package/dist/server/ui/assets/{ReviewDetailPage-I54h-2L-.js → ReviewDetailPage-YlFGGJv7.js} +2 -2
  118. package/dist/server/ui/assets/ReviewsPage-Diegg4jt.js +19 -0
  119. package/dist/server/ui/assets/index-DuMIsIyY.css +32 -0
  120. package/dist/server/ui/assets/index-sEtQpiB4.js +868 -0
  121. package/dist/server/ui/assets/{useReviewSubscription-C0GEsiRw.js → useReviewSubscription-CMhQ2m0h.js} +22 -22
  122. package/dist/server/ui/index.html +2 -2
  123. package/dist/{server/templates/claude-opus.json → templates/dev-loop.json} +365 -209
  124. package/package.json +9 -4
  125. package/dist/node_modules/@devchain/shared/schemas/export-schema.spec.d.ts +0 -2
  126. package/dist/node_modules/@devchain/shared/schemas/export-schema.spec.d.ts.map +0 -1
  127. package/dist/node_modules/@devchain/shared/schemas/export-schema.spec.js +0 -88
  128. package/dist/node_modules/@devchain/shared/schemas/export-schema.spec.js.map +0 -1
  129. package/dist/server/templates/claude-codex-advanced.json +0 -470
  130. package/dist/server/templates/simple-codex.json +0 -469
  131. package/dist/server/ui/assets/ReviewsPage-B4ua5hiX.js +0 -19
  132. package/dist/server/ui/assets/index-CqcmnFBh.css +0 -32
  133. package/dist/server/ui/assets/index-JbUMpbg7.js +0 -858
  134. package/dist/templates/claude-codex-advanced.json +0 -470
  135. package/dist/templates/simple-codex.json +0 -469
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devchain-cli",
3
- "version": "0.7.2",
3
+ "version": "0.8.0",
4
4
  "description": "AI driven development platform",
5
5
  "homepage": "https://devchain.twitechlab.com/",
6
6
  "repository": {
@@ -8,8 +8,13 @@
8
8
  "url": "https://github.com/twitech-lab/devchain.git"
9
9
  },
10
10
  "changelog": {
11
- "0.7.2": [
12
- "Fix Compact monitor regex in base templates"
11
+ "0.8.0": [
12
+ "Preset system in templates: switch your favorite AI teams with presets with a single click",
13
+ "Multi-provider support: support GLM models through Claude",
14
+ "Tab-independent project selection with hybrid storage",
15
+ "Activity signal filtering to prevent spurious agent busy states",
16
+ "Session fixes: duplicate agent sessions race condition, nested lock deadlock, timing delays for slower CLI providers",
17
+ "Details: https://devchain.twitechlab.com/releases/0.8.0/"
13
18
  ],
14
19
  "0.7.1": [
15
20
  "Template updates for Claude Code v2 compatibility"
@@ -186,7 +191,7 @@
186
191
  "scripts": {
187
192
  "start": "node dist/cli.js start",
188
193
  "stop": "node scripts/cli.js stop",
189
- "dev": "node scripts/cli.js start --dev",
194
+ "dev": "pnpm --filter shared build && node scripts/cli.js start --dev",
190
195
  "dev:pure": "pnpm --filter local-app dev",
191
196
  "dev:ui": "pnpm --filter local-app dev:ui",
192
197
  "dev:api": "pnpm --filter remote-api dev",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=export-schema.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-schema.spec.d.ts","sourceRoot":"","sources":["../../src/schemas/export-schema.spec.ts"],"names":[],"mappings":""}
@@ -1,88 +0,0 @@
1
- import { ExportSchema } from './export-schema';
2
- describe('ExportSchema', () => {
3
- describe('profiles.familySlug', () => {
4
- const baseProfile = {
5
- name: 'Test Profile',
6
- provider: { id: 'provider-1', name: 'claude' },
7
- options: null,
8
- instructions: null,
9
- temperature: null,
10
- maxTokens: null,
11
- };
12
- const baseTemplate = {
13
- version: 1,
14
- exportedAt: '2024-01-01T00:00:00Z',
15
- prompts: [],
16
- profiles: [baseProfile],
17
- agents: [],
18
- statuses: [],
19
- };
20
- it('should accept profile without familySlug (backward compatibility)', () => {
21
- const result = ExportSchema.safeParse(baseTemplate);
22
- expect(result.success).toBe(true);
23
- });
24
- it('should accept profile with familySlug as string', () => {
25
- const template = {
26
- ...baseTemplate,
27
- profiles: [{ ...baseProfile, familySlug: 'coder' }],
28
- };
29
- const result = ExportSchema.safeParse(template);
30
- expect(result.success).toBe(true);
31
- if (result.success) {
32
- expect(result.data.profiles[0].familySlug).toBe('coder');
33
- }
34
- });
35
- it('should accept profile with familySlug as null', () => {
36
- const template = {
37
- ...baseTemplate,
38
- profiles: [{ ...baseProfile, familySlug: null }],
39
- };
40
- const result = ExportSchema.safeParse(template);
41
- expect(result.success).toBe(true);
42
- if (result.success) {
43
- expect(result.data.profiles[0].familySlug).toBeNull();
44
- }
45
- });
46
- it('should reject profile with familySlug as non-string', () => {
47
- const template = {
48
- ...baseTemplate,
49
- profiles: [{ ...baseProfile, familySlug: 123 }],
50
- };
51
- const result = ExportSchema.safeParse(template);
52
- expect(result.success).toBe(false);
53
- });
54
- it('should allow multiple profiles with same familySlug', () => {
55
- const template = {
56
- ...baseTemplate,
57
- profiles: [
58
- { ...baseProfile, name: 'CodeOpus', familySlug: 'coder' },
59
- { ...baseProfile, name: 'CodeGPT', familySlug: 'coder' },
60
- ],
61
- };
62
- const result = ExportSchema.safeParse(template);
63
- expect(result.success).toBe(true);
64
- if (result.success) {
65
- expect(result.data.profiles[0].familySlug).toBe('coder');
66
- expect(result.data.profiles[1].familySlug).toBe('coder');
67
- }
68
- });
69
- it('should accept mixed profiles with and without familySlug', () => {
70
- const template = {
71
- ...baseTemplate,
72
- profiles: [
73
- { ...baseProfile, name: 'WithFamily', familySlug: 'coder' },
74
- { ...baseProfile, name: 'WithoutFamily' },
75
- { ...baseProfile, name: 'WithNull', familySlug: null },
76
- ],
77
- };
78
- const result = ExportSchema.safeParse(template);
79
- expect(result.success).toBe(true);
80
- if (result.success) {
81
- expect(result.data.profiles[0].familySlug).toBe('coder');
82
- expect(result.data.profiles[1].familySlug).toBeUndefined();
83
- expect(result.data.profiles[2].familySlug).toBeNull();
84
- }
85
- });
86
- });
87
- });
88
- //# sourceMappingURL=export-schema.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-schema.spec.js","sourceRoot":"","sources":["../../src/schemas/export-schema.spec.ts"],"names":[],"mappings":"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"}